首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用C语言编写SBC中的i2c接口

用C语言编写SBC中的i2c接口
EN

Stack Overflow用户
提问于 2012-03-07 22:55:50
回答 1查看 670关注 0票数 1

我正在尝试使用SCB 7500的i2c接口,以便将其与单片机atmega32连接起来。我想配置双锁频率,为此我需要配置ECONA网络访问处理器。我无法在C代码中配置双锁频率的寄存器。我有一个名为i2ctem.cim的程序,使用它来帮助我。

这是TWI: reg = map_phys(0x71000020,&fd)的地址;时钟的地址是0x24;TWI_CLKDIV的地址是16:8。

我做了这样的事:

空比特率(长比特率){

代码语言:javascript
复制
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)!

EN

回答 1

Stack Overflow用户

发布于 2012-03-08 01:10:13

您还没有开发您的环境,但是如果它是裸金属,并且您想在地址0x24设置一个内存映射寄存器,您可以简单地这样做:

代码语言:javascript
复制
*(volatile unsigned int *)0x24 = bitratediv;

大多数人定义一个宏,类似于:

代码语言:javascript
复制
#define mmio(reg) (*(volatile unsigned int *)(register))

这样你就可以写:

代码语言:javascript
复制
mmio(0x24) = bitratediv;

在您的例子中,您只需要设置该寄存器的前8位,所以如下所示:

代码语言:javascript
复制
mmio(0x24) = (mmio(0x24) & 0x00FF) | (bitratediv << 8);

可能就是你要找的东西。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9610401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档