请问一下我将GPIO bank7所在的引脚配置成IO后,GPIO所有相关寄存器值仍全是0,比如控制输入输出的DIR寄存器本来默认应该是全1的,但现在全是0,而且不能对他们进行写操作,这是什么原因?是还需要设置什么东西启动GPIO的功能么?
noaming:
你好,请检查一下芯片的管脚复用设置是否正确,管脚是否用于GPIO功能。
Hao Wang5:
回复 noaming:
代码如下,已经配置GPIO了,是不是还有其他东西没有配置?刚开始学习DSP,麻烦了。
#include <stdio.h>
#define SYS_BASE 0x01C14000#define PINMUX16 *(unsigned int*)(SYS_BASE + 0x160) //PINMUX16#define PINMUX17 *(unsigned int*)(SYS_BASE + 0x164) //PINMUX17#define GPIO_BANK67_DIR *(unsigned int*)(GPIO_BANK67_BASE)#define GPIO_BANK67_DAT *(unsigned int*)(GPIO_BANK67_BASE + GPIO_DAT_OFFSET)#define GPIO_REG_BASE (0x01E26000)#define GPIO_BANK_OFFSET (0x28)#define GPIO_DAT_OFFSET (0x04)#define GPIO_SET_OFFSET (0x08)#define GPIO_CLR_OFFSET (0x0C)#define GPIO_BINTEN *(unsigned int*)(GPIO_REG_BASE + 0x08)#define GPIO_BANK01_BASE (GPIO_REG_BASE + 0x10)#define GPIO_BANK23_BASE (GPIO_BANK01_BASE + GPIO_BANK_OFFSET)#define GPIO_BANK45_BASE (GPIO_BANK23_BASE + GPIO_BANK_OFFSET)#define GPIO_BANK67_BASE (GPIO_BANK45_BASE + GPIO_BANK_OFFSET)
/* * main.c */void main(void) { int i; PINMUX16 = 0x88888822; PINMUX17 = 0x88888888; GPIO_BANK67_DIR = 0x00ffffff; while(1) { for(i=0;i<0x0000ffff;i++){;}
GPIO_BANK67_DAT = 0xffffffff;
for(i=0;i<0x0000ffff;i++){;}
GPIO_BANK67_DAT = 0x0;
}
}
noaming:
回复 Hao Wang5:
一般的方法就是:
配置管脚复用;
设置为输出方向;
然后置位:GPIO Set Data Registers (SET_DATAn)
noaming:
回复 Hao Wang5:
你用CCS检查一下寄存器:
当执行完程序后,在地址0x01E2608C处的值现在是多少?
Hao Wang5:
回复 noaming:
值是0。引脚复用我已经设置成了GPIO,但是从设置GPIO方向开始就不行了,GPIO方向寄存器的值没法改,全是0。另外GPIO的REVID寄存器的值也是0,貌似IO功能根本就没有启动
Hao Wang5:
回复 noaming:
另外GPIO的REVID寄存器值也是0,好像IO的功能根本就没有启动
noaming:
回复 Hao Wang5:
恩,首先建议你在debug状态下查看一下你所操作的GPIO寄存器地址,对应手册中的GPIO寄存器地址,是否准确。因为我看程序中这个写的有点乱。
确定每次配置急促去你的数据,准确的写入到了相应地址的寄存器中,这一点你可以写一个寄存器,用CCS查看该寄存器一次。