标题:
DSP F2809调试无法设置寄存器
[打印本页]
作者:
yuyang911220
时间:
2017-6-19 11:32
标题:
DSP F2809调试无法设置寄存器
使用的是ICETEK-5100_USB仿真器。为了验证DSP是可工作的,编写一个有关GPIO的程序,是某几位为高电平,然后用万用表测量结果。验证其正确性。
具体程序如下:
#define GPADAT1 *(unsigned int *)0x6FC0
#define GPADAT2 *(unsigned int *)0x6FC1 //GPIO数据寄存器
#define GPAMUX1 *(unsigned int *)0x6F86
#define GPAMUX2 *(unsigned int *)0x6F88 //设置GPIO是否为数字IO
#define GPADIR1 *(unsigned int *)0x6F8A
#define GPADIR2 *(unsigned int *)0x6F8B //设置GPIO输入还是输出
int main()
{
GPAMUX1 &=0xfcff; //设置GPIO8和9为通用数字IO
GPADIR1 |=0x0300; //设置GPIO8和9为输出
while(1){
GPADAT1 |=0x0300;
GPADAT1 |=0x0300; //使GPIO8和9输出高电平
GPADAT1 &=0xfeff;
GPADAT1 &=0xfeff; //使GPIO8输出为低电平
}
return 0;
}
复制代码
但是不知道为什么就是无法设置寄存器。然后在simulator的情况下,发现以上程序没有问题,可以在
CCS
中的memory窗口中查看。
在网上查找原因,终于找到了问题的实质:28x中有一些配置寄存器是受保护的,无法直接操作。也就是说在对这些寄存器进行修改之前,需要先去掉保护功能,而保护状态是由状态寄存器中EALLOW标志来指示的。汇编指令“EALLOW”就是将该标志位置位,允许对受保护的寄存器操作。EALLOW一般和EDIS配套使用,在对受保护的寄存器操作之后,用EDIS恢复寄存器的被保护状态。
修改后的程序为:
#define EALLOW asm(" EALLOW")
#define EDIS asm(" EDIS")
#define GPADAT1 *(unsigned int *)0x6FC0
#define GPADAT2 *(unsigned int *)0x6FC1
#define GPAMUX1 *(unsigned int *)0x6F86
#define GPAMUX2 *(unsigned int *)0x6F88
#define GPADIR1 *(unsigned int *)0x6F8A
#define GPADIR2 *(unsigned int *)0x6F8B
#define GPAPUD *(unsigned int *)0x6F8C
int main()
{
EALLOW;
GPAMUX1 &=0xfcff;
GPADIR1 |=0x0300;
EDIS;
while(1){
EALLOW;
GPADAT1 |=0x0300;
GPADAT1 |=0x0300;
EDIS;
EALLOW;
GPADAT1 &=0xfeff;
GPADAT1 &=0xfeff;
EDIS;
}
return 0;
}
复制代码
一切OK!!!
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0