I2C 配置及应用
一、I2C的協(xié)議這里就不贅述了,隨便搜一下就可以了解。
二、I2C的初始化
1.Enable I2C clock
configure the PSC register(if it is driven by PSC)PSC相關說明可以查看手冊
2. Configure the PinMultiplexing registers
3. Place I2C in reset
set IRS =0 in ICMDR register
4.Configure the peripheral clock operation frequency(ICPSC)
NOTE:the frequency should be between 6.7 and 13.3MHz
5.Configure i2c master clock frequency:
configure ICCLKL , ICCLKH
7.Make sure the interrupt status register(ICSTR) is cleared:
Read ICSTR and write it back (write 1 to clear) ICSTR = ICSTR
Read ICIVR until it is 0.?
8.Take i2c controller out of reset?
set IRS=1 in ICMDR
?
三、I2C作為master發(fā)送數(shù)據(jù)的配置
?
?
1. Wait until bus bit is cleared (BB =0 in ICSTR)
2.Configure ICMDR register
?
?
- configure I2C as Master ( MST = 1 );
- indicate the i2c configuration to be used(if TRX = 0, device configured as Data Receiver);
- configure serial data formats( eg. ?XA = 0, 7-bit addressing format );
- set RM = 0 to disable repeat mode;
- set DLB = 0 to disable loopback mode;
- set FDF = 0 to disable free data format;
- optional:disable start byte mode if addressing a fully fledged i2c device (set STB = 0 );
- set number of bits to transfer to be 8 bits (BC = 0) ;
- 設置仿真器斷點無響應,bus繼續(xù)運行, ICMDR中 FREE=1
3.設置發(fā)送數(shù)據(jù)長度(字節(jié))ICCNT
?
4.Configure Slave Address( ICSAR = 7bit address)
5.Generate a START event ,followed by Slave Address,etc.(set STT =1 in ICMDR)
6.循環(huán)發(fā)送數(shù)據(jù),數(shù)據(jù)寫入ICDXR,等待ICSTR中ICXRDY=1,表明數(shù)據(jù)搬運完成。并設置超時重新初始化init(我這設置的是while循環(huán)不超過500000)
7. End transfer/release bus when transfer is done. Generate a STOP event (set STP = 1 in ICMDR).?
四、I2C作為master讀取數(shù)據(jù)
?
1. Wait until bus bit is cleared (BB =0 in ICSTR)
2.Configure ICMDR register
?
- configure I2C as Master ( MST = 1 );
- indicate the i2c configuration to be used(if TRX = 0, device configured as Data Receiver);
- configure serial data formats( eg. ?XA = 0, 7-bit addressing format );
- set RM = 0 to disable repeat mode;
- set DLB = 0 to disable loopback mode;
- set FDF = 0 to disable free data format;
- optional:disable start byte mode if addressing a fully fledged i2c device (set STB = 0 );
- set number of bits to transfer to be 8 bits (BC = 0) ;
- 設置仿真器斷點無響應,bus繼續(xù)運行, ICMDR中 FREE=1
3.設置發(fā)送數(shù)據(jù)長度(字節(jié))ICCNT
?
4.Configure Slave Address( ICSAR = 7bit address)
5.Generate a START event ,followed by Slave Address,etc.(set STT =1 in ICMDR)
6.循環(huán)接收數(shù)據(jù)
等待ICSTR中ICRRDY=1,為1時表明數(shù)據(jù)可以讀取,并設置超時重新初始化init(我這設置的是while循環(huán)不超過500000),讀取ICDRR中數(shù)據(jù)。當數(shù)據(jù)為最后一個字節(jié)時發(fā)送NACK(ICMDR中NACKMOD=1)
7. End transfer/release bus when transfer is done. Generate a STOP event (set STP = 1 in ICMDR).?
?
?
?
?
?
?
總結
- 上一篇: ROS(12):双足机器人开发调研
- 下一篇: 【第十一讲】TMS320F28335开发