2012-03-07 8 views
1

我试图使用SCB TS-7500的I2C接口,以便将其comunicate到单片机ATmega32的。我想配置双向锁定频率,为此我需要配置ECONA CAVIUM网络访问处理器。我不能在C代码中配置双锁频率寄存器。我有一个程序名为i2ctemp.c即时通讯使用它来帮助我。编程在SBC I2C接口用C语言

这是TWI的地址:(0x71000020,& FD)REG = map_phys;时钟的地址是0x24;然后为TWI_CLKDIV比特16:8。

我做了这样的事情:

无效setbitrate(长比特率) {

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”,因为这doesn' t work -------------------> reg [0x24/sizeof(unsigned)] = bitratediv; ** }

谢谢您的帮助

这里是ECONA CAVIUM的手册和程序i2ctemp.c (ftp://ftp.embeddedarm.com/ts-arm- SBC/TS-7558-LINUX /样品/ i2ctemp.c)! (http://www.embeddedarm.com/documentation/third-party/ECONA-CNS21XX-HRM-v.1.8.pdf)!

+0

你真的想标记这个'google-chrome'吗?我可能会添加'embedded'和'i2c'来获取读者。 (对不起,我不知道答案。) – 2012-03-08 00:18:25

+0

如果有人对我的问题,请加我一个评论,以帮助我找到答案的问题....感谢 – 2012-03-09 22:57:18

+0

是谷歌是惊人的相信或不哈哈..但我有一个家伙...是我的问题是不可理解的?? ...谢谢你的评论...看到亚! – 2012-03-09 23:00:58

回答

2

您还没有decsribed您的环境,但如果是裸机和你想在地址0x24到设置内存映射寄存器,您可以简单地这样做:

*(volatile unsigned int *)0x24 = bitratediv; 

大多数人定义一个宏是这样的:

#define mmio(reg) (*(volatile unsigned int *)(register)) 

所以,你可以这样写:

mmio(0x24) = bitratediv; 

在你的情况,你只需要ŧ o设置该寄存器的前8位,因此类似于:

mmio(0x24) = (mmio(0x24) & 0x00FF) | (bitratediv << 8); 

可能是您要找的。

+0

这就是我所需要的,谢谢你,我是初学者嘿嘿.... – 2012-03-09 23:05:12