完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近愁于I2C,例程实在太少了,,,
一个器件的I2C为: 写地址是0XA6. 初始化代码为: ROM_SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | //80mhz SYSCTL_OSC_MAIN); SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); GPIOPinConfigure(GPIO_PB2_I2C0SCL); GPIOPinConfigure(GPIO_PB3_I2C0SDA); GPIOPinTypeI2C(GPIO_PORTB_BASE, GPIO_PIN_3); GPIOPinTypeI2CSCL(GPIO_PORTB_BASE, GPIO_PIN_2 ); I2CMasterInitExpClk(I2C0_MASTER_BASE, SysCtlClockGet(), true); //400kbps I2CMasterEnable(I2C0_MASTER_BASE); 应该没问题吧... 可往往下就不会写了... 对这几个函数十分不明白 I2CMasterSlaveAddrSet (unsigned long ulBase, unsigned char ucSlaveAddr, tBoolean bReceive) 这个函数是设置从器件的地址的吧??最后一个参数定义是写地址还是读地址.. I2CMasterSlaveAddrSet(I2C0_MASTER_BASE,0XA6,false);此处应该这样写吧?? 还有就是这两个函数 I2CMasterControl I2CMasterDataPut 如果要对器件0x45这个8位寄存器读一个字节,那这个程序应该怎么写呢? 那如果多0x46这个寄存器读4个字节呢? 谢谢~ |
|
相关推荐
3 个讨论
|
|
1. I2CMasterSlaveAddrSet (unsigned long ulBase, unsigned char ucSlaveAddr, tBoolean bReceive)
最后一个参数用来指示发送写命令还是读命令。 为0 表示发送写命令,为1表示发送读命令。 2. I2CMasterDataPut(I2C0_BASE, DAT);把要写的数据写放到发送寄存器中 I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_SINGLE_SEND); 把要写的数据单次或连续发送到总线上. 3. 对器件0X45的寄存器读操作应该这样写: I2CMasterSlaveAddrSet(I2C0_BASE, ulSlaveAddr, 0); //其中ulSlaveAddr 为I2c从设备的地址. I2CMasterDataPut(I2C0_BASE, 0x45); // 0X45为设备寄存器地址 I2CMasterControl(I2C0_BASE, I2C_MASTER_CMD_SINGLE_SEND); I2CMasterSlaveAddrSet(I2C0_BASE, ulSlaveAddr, 1); //其中ulSlaveAddr 为I2c从设备的地址. pui32DataRx = I2CSlaveDataGet(I2C0_BASE); 中间略掉了ACK应答判断。 |
|
|
|
|
|
pingfandeshijie 发表于 2020-4-8 15:48 经过调试 正确的方式应该是: unsigned int ADXL_Single_Read(unsigned int reg) [ unsigned int back; I2CMasterSlaveAddrSet(I2C0_MASTER_BASE,SlaveAddress,false); I2CMasterDataPut(I2C0_MASTER_BASE,reg); I2CMasterControl(I2C0_MASTER_BASE,I2C_MASTER_CMD_BURST_SEND_START); while(I2CMasterBusy(I2C0_MASTER_BASE)); I2CMasterSlaveAddrSet(I2C0_MASTER_BASE,SlaveAddress,true); I2CMasterControl(I2C0_MASTER_BASE,I2C_MASTER_CMD_SINGLE_RECEIVE); while(I2CMasterBusy(I2C0_MASTER_BASE)); back=I2CMasterDataGet(I2C0_MASTER_BASE); return(back); ] 多谢回答 |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
692 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
605 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1064 浏览 1 评论
755 浏览 0 评论
普中科技F28335开发板每次上电复位后数码管都会显示,如何熄灭它?
529 浏览 1 评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
171浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
133浏览 14评论
在使用3254进行录音的时候出现一个奇怪的现象,右声道有吱吱声,请教一下,是否是什么寄存器设置存在问题?
129浏览 13评论
TLV320芯片内部自带数字滤波功能,请问linein进来的模拟信号是否是先经过ADC的超采样?
125浏览 12评论
GD32F303RCT6配置PA4 ADC引脚,将PA2代替key功能,PA2连接时无法实现预期功能,为什么?
64浏览 10评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 14:01 , Processed in 0.734789 second(s), Total 46, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号