tms320f2809硬件调试无法设置寄存器


使用的是ICETEK-5100_USB仿真器。为了验证DSP是可工作的,编写一个有关GPIO的程序,是某几位为高电平,然后用万用表测量结果。验证其正确性。

具体程序如下:

  1. #define GPADAT1 *(unsigned int *)0x6FC0  
  2. #define GPADAT2 *(unsigned int *)0x6FC1    //GPIO数据寄存器  
  3. #define GPAMUX1 *(unsigned int *)0x6F86  
  4. #define GPAMUX2 *(unsigned int *)0x6F88    //设置GPIO是否为数字IO  
  5. #define GPADIR1 *(unsigned int *)0x6F8A  
  6. #define GPADIR2 *(unsigned int *)0x6F8B    //设置GPIO输入还是输出   
  7.   
  8. int main()  
  9. {  
  10. GPAMUX1 &=0xfcff;                            //设置GPIO8和9为通用数字IO   
  11. GPADIR1 |=0x0300;                            //设置GPIO8和9为输出   
  12. while(1){  
  13. GPADAT1 |=0x0300;                       
  14. GPADAT1 |=0x0300;                            //使GPIO8和9输出高电平   
  15. GPADAT1 &=0xfeff;  
  16. GPADAT1 &=0xfeff;                            //使GPIO8输出为低电平   
  17. }  
  18. return 0;  
  19. }  

但是不知道为什么就是无法设置寄存器。然后在simulator的情况下,发现以上程序没有问题,可以在ccs中的memory窗口中查看。 

在网上查找原因,终于找到了问题的实质:28x中有一些配置寄存器是受保护的,无法直接操作。也就是说在对这些寄存器进行修改之前,需要先去掉保护功能,而保护状态是由状态寄存器中EALLOW标志来指示的。汇编指令“EALLOW”就是将该标志位置位,允许对受保护的寄存器操作。EALLOW一般和EDIS配套使用,在对受保护的寄存器操作之后,用EDIS恢复寄存器的被保护状态。 

修改后的程序为:

  1. #define EALLOW asm(" EALLOW")  
  2. #define EDIS   asm(" EDIS")  
  3.  
  4. #define GPADAT1 *(unsigned int *)0x6FC0  
  5. #define GPADAT2 *(unsigned int *)0x6FC1  
  6. #define GPAMUX1 *(unsigned int *)0x6F86  
  7. #define GPAMUX2 *(unsigned int *)0x6F88  
  8. #define GPADIR1 *(unsigned int *)0x6F8A  
  9. #define GPADIR2 *(unsigned int *)0x6F8B  
  10. #define GPAPUD  *(unsigned int *)0x6F8C   
  11.   
  12. int main()  
  13. {  
  14. EALLOW;  
  15. GPAMUX1 &=0xfcff;  
  16. GPADIR1 |=0x0300;  
  17. EDIS;  
  18. while(1){  
  19. EALLOW;  
  20. GPADAT1 |=0x0300;  
  21. GPADAT1 |=0x0300;  
  22. EDIS;  
  23. EALLOW;  
  24. GPADAT1 &=0xfeff;  
  25. GPADAT1 &=0xfeff;  
  26. EDIS;  
  27. }  
  28. return 0;  
  29. }  

一切OK!!!

相关内容