gpt4 book ai didi

c - 使用 C 语言在 SBC 中编写 i2c 接口(interface)

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:37 25 4
gpt4 key购买 nike

我正在尝试使用 SCB TS-7500 的 i2c 接口(interface),以便将其与微 Controller atmega32 通信。我想配置 twiclockfrequency,为此我需要配置 ECONA CAVIUM 网络访问处理器。我无法在 C 代码中配置 twiclock 频率的寄存器。我有一个名为 i2ctemp.c 的程序,我正在使用它来帮助我。

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

我做了这样的事情:

void 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”,因为这不起作用-------- ----------> reg[0x24/sizeof(unsigned)] = bitratediv; **

谢谢你的帮助

这是 ECONA CAVIUM 的手册和程序 i2ctemp.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)!

最佳答案

您还没有描述您的环境,但是如果它是裸机并且您想要在地址 0x24 处设置内存映射寄存器,您可以简单地执行以下操作:

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

大多数人将宏定义为:

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

这样你就可以写:

mmio(0x24) = bitratediv;

在您的情况下,您只想设置该寄存器的前 8 位,例如:

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

可能是您正在寻找的。

关于c - 使用 C 语言在 SBC 中编写 i2c 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9610401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com