你好,如果我已经知道寄存器的地址,想在CCS里面用C语言往这个地址里面写入数据,如下:
#include "gpio.h"
#include "soc_C6748.h"
#include "hw_psc_C6748.h"
#include "lcdkC6748.h"
#include "demoCfg.h"
#include "hw_types.h"
void main(void)
{ HWREG(0X01E1000C)=0XFFFFFFFF;
HWREG(0X01E26010)=0XFFFFFDFF;
HWREG(0X01E26038)=0XFFFFEFFF;
HWREG(0X01E26088)=0XFFFFCFFF;
HWREG(0X01E26018)=0X00000200;
HWREG(0X01E26044)=0X00001000;
HWREG(0X01E26090)=0X00001000;
HWREG(0X01E26094)=0X00002000;
}
HWREG已经在hw_types.h定义了,但是我在Debug之后用step into 功能在memory Browser 里面发现,相对应的寄存器地址里面的内容根本没有改变,32位都是0.请问是出了什么问题呢?我用的是TMS320C6748 DSP Development Kit (LCDK)
noaming:
你好,你描述的“ HWREG(0X01E1000C)”,这个具体是什么内容?
noaming:
最简单的写32位寄存器方法是:
*(unsigned int *)0x…. = 0x….;
第一个0x后面跟的是寄存器在memory map中的物理地址。
Xu Jiang:
回复 noaming:
您好,我用了您的方法还是写不进去,难道这款控制器有什么写保护的地方吗?还是我写之前得设置一些东西?有没有写使能的寄存器?
noaming:
回复 Xu Jiang:
您好,具体写的是哪个寄存器?
Xu Jiang:
回复 noaming:
DIR01, 就是控制输入输出的那个寄存器,地址是0X01E26010。
noaming:
回复 Xu Jiang:
我直接这一句语句执行后,数据就写进去了啊。。。
Xu Jiang:
回复 noaming:
谢谢你,原来是因为我之前定义的器件出错误了,麻烦再问您一个问题,我现在想写入寄存器CLR_DATA01 地址是0X01E2601C,但是写不进去,之前的DIR01可以写进去,请问这是为什么啊?
Xu Jiang:
回复 noaming:
其实我就是想把一个GPIO的电平拉低,然后让板子上的LED灭掉,我想从最基本的开始。。。
noaming:
回复 Xu Jiang:
按理说你已经掌握了写寄存器的方法,因此不应该再出错。所以请注意下面这段:
The GPkPj bit is ignored when GPk[j] is configured as an input
如果你把GPk[j]配置为输入口的话,此时写这个GPkPj bit让它输出为低,这是会被忽略掉的。
这个大概就是原因。
Xu Jiang:
回复 noaming:
谢谢你的建议~我试了一下下面的程序
int main(void)
{ *(unsigned int*)0X01E26010=0X00000000;//使得DIR01每一位都为0,设成输出
*(unsigned int*)0X01E26014=0X00000000;//使得OUT_DATA01每一位都为0,使得输出为0
}
因为TMS320C6748 LCDK上面的LED之一D7是和GPIO0[9]相连的,但是程序运行的时候D7一直都是亮的,虽然在memory browser里面这些寄存器都成功的被写入了。
请问这是为什么呢?