请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:LAUNCHXL-F28069M 主题中讨论的其他器件:C2000WARE
你(们)好
我想将 I2C 配置为仅在主机模式下使用 TX FIFO、而不使用中断
我只需要 Tx 作为主器件、无需读取(Rx)。 它用于控制 OLED 屏幕 SSD1306
在多次搜索和示例之后、我成功使用了此配置
配置
///----------------------------------
// InitI2C -此函数将 I2C 初始化为已知状态。
void InitI2C()
{
//初始化 I2C-A
I2CARegs.I2CMDR.ALL = 0x0000;
I2CARegs.I2CISAR = I2C_SLAVE_ADDR;//从地址
// 90 MHz/(((8+1)(10+5 + 5+5))= 400 kHz
I2CARegs.I2CPSC.ALL = 8;//预分频器-在模块 clk
I2cRegs.I2CCLKL = 10上需要7-12MHz;//注:必须是非零
I2cRegs.I2CCLKH = 5;//注:必须是非零
// I2cirRegs.I2CIER = 0x24;// SCD & I2AR.0100
;中断= 0X0X0XI2AR.I2CIER = 0100;/中断= 0X0XI2AR.I2AR.I2AR.I0100//寻址为从机中断使能位
// I2cirRegs.I2CIER.bit.SCD = 1;//停止条件检测到的中断使能位
// I2cirRegs.I2CIER.bit.XRDY = 0;//发送数据就绪中断使能位
// I2cir.bit.I2r.I2I
=
0;//接收数据就绪中断就绪= 0;I2CIEr.I2I2I2ARRn = 0//无确认中断使能位
// I2caRegs.I2CIER.bit.ARBL = 0;//仲裁丢失中断使能位
// I2caRegs.I2CFFTX.ALL = 0x6000;//启用 FIFO 模式和 TXFIFO
I2caRegs.I2CFFTX.BIS= 0x6000;//启用 TX2CFI2RFT.I2RFIFT.I2RFIF.I2FIFO
=1
位;TX2RFIF.I2RFIF.I2RFIF.I2RFIF.I2RFIF.I2FIFO =发送 FIFO;TX.I2RFIF.I2RFIF.I2RFIF.I2RFIF.I2RFIF.I2RFIF.I2RFIF.I2RFIF//清除 TXFFINT 标志
I2caRegs.I2CFFTX.bit.TXFFIENA=0;//当置位
I2caRegs.I2CFFTX.bit.TXFFIL = 0时,TXFFINT 标志不会产生中断;//发送 FIFO 中断级别//I2caRegs.I2CFX.BIT.0**
;无 RXFFI0**位/RXFFIRFIF.RFI0**
//清除 RXFFINT 标志
I2CARegs.I2CFFRX.bit.RXFFIENA=0;//当置位
I2CARegs.I2CFFRX.bit.RXFFIL = 0时、RXFFINT 标志会生成一个中断;//接收 FIFO 中断级别
//I2CARegs.I2CMDR.ALL = 0xI2CMDR.0时、RXFFIL = 0;//接收 FIFO 中断位/I2CA.I2CMDR.I2CMDR.0;当暂停
时、I2I2I2CMDR.I2I2CMDR.0 = 0 =
0;/停止 I2I2I2I2I2I2CMDR.I2I2I2CMDR.I2I2CMDR//暂停
I2caRegs.I2CMDR.bit.STT = 0时停止 I2C;//开始条件位
I2caRegs.I2CMDR.bit.STP = 0;//停止条件位
I2caRegs.I2CMDR.bit.MST = 0;//从模式
I2caRegs.I2CMDR.0 =
0;/ I2c.I2c.I2e.I2c.0;/ I2ca-R2.I2e.I2e.I2c.R2.ICMT.0 = 0;/位重复模式
//数字回送模式被禁用
I2caRegs.I2CMDR.bit.IRS = 1;// I2C 模块被启用
I2caRegs.I2CMDR.bit.STB = 0;// I2C 模块不在起始字节模式
I2caRegs.I2CMDR.bit.FDF = 0;//自由数据格式
为8位/ I2b.R
oledInit();
oledClear();
oledGotoYX( 0,0);
oledPrint("PWM");
}
///----------------------------------
int16_t i2c1Xfer (
uint8 address、
uint8* wdata、int wsize、
uint8* RDATA、int rsize)
{
uint16 i;
//I2cRegs.I2CMDR.bit.IRS = 1;
//确保 I2C 不忙且已停止
//while (I2cRegs.I2csr.bit=
1;//确保 I2C 不忙;// while = 1)//清除 SCD 位(停止条件位)
//while (I2caRegs.I2CMDR.bit.STP = 1);//停止位循环
I2caRegs.I2CSAR =地址;// I2C 从器件地址
//while (I2cRegs.I2CSTR.bit.BB = 1);//仍然忙?
I2caRegs.I2CCNT = wsize;//设置要发送
的字节数(i=0;i
这个顺序应该给出0x3C 为一个写入顺序(1位移位)、然后是0x80 (cmd)、然后是0xA7
而不是这样
我对以 8位时钟开始的情况感到奇怪、在写入模式下、0比 Stop 更像底座、没有第一个字节比结束字节更好???? 没有停止位
如果我尝试在它停止工作时添加...
感谢你的帮助
