我正在尝试使用SCB 7500的i2c接口,以便将其与单片机atmega32连接起来。我想配置双锁频率,为此我需要配置ECONA网络访问处理器。我无法在C代码中配置双锁频率的寄存器。我有一个名为i2ctem.cim的程序,使用它来帮助我。
这是TWI: reg = map_phys(0x71000020,&fd)的地址;时钟的地址是0x24;TWI_CLKDIV的地址是16:8。
我做了这样的事:
空比特率(长比特率){
unsigned bitratediv;
//Calcule of twi clock divider value
//Formule is TwiCLockFreq = PCLK /(2*(TwiClockDivider +1))
bitratediv = (unsigned)(PCLK/(2*bitrate)); //PCLK= 1M and bitrate= 50k
///If bitrate value is less than 16 then do:
if(bitratediv <= 16)
bitratediv = bitrate -1 ;
//FINALLY assigned the value to the register of the TWICLOCK
reg[0x24/sizeof(unsigned)] = bitratediv;*我只想知道如何得到这个寄存器"0x24“,因为它不起作用
谢谢你的帮助
这是ECONA的手册和程序i2ctem.c (ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7558-linux/samples/i2ctemp.c)!(http://www.embeddedarm.com/documentation/third-party/ECONA-CNS21XX-HRM-v.1.8.pdf)!
发布于 2012-03-08 01:10:13
您还没有开发您的环境,但是如果它是裸金属,并且您想在地址0x24设置一个内存映射寄存器,您可以简单地这样做:
*(volatile unsigned int *)0x24 = bitratediv;大多数人定义一个宏,类似于:
#define mmio(reg) (*(volatile unsigned int *)(register))这样你就可以写:
mmio(0x24) = bitratediv;在您的例子中,您只需要设置该寄存器的前8位,所以如下所示:
mmio(0x24) = (mmio(0x24) & 0x00FF) | (bitratediv << 8);可能就是你要找的东西。
https://stackoverflow.com/questions/9610401
复制相似问题