马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?快速注册
x
1 I2C总线控制器的初始化
$ e; g" p& G8 W# W7 L( O
+ u2 F, [$ ]1 B" j9 l9 i8 _& ] 为了正确使用DM642内置的I2C模块,首先需要正确的初始化。
# R% z* Y( w+ G8 ]/ R
* r% F9 _. Z) i 1.1 解锁DM642中的I2C模块 m$ g7 d& d# D; |/ m) e4 ^% v4 e
9 ]/ c9 ^6 W( ^2 c/ Z 在DM642的I2C应用中,容易遇到不能使用初始化I2C模块的问题,原因在于没有先解锁并使能I2C模块。在DM642的数据手册中可以看到,复位后I2C模块是处于锁定禁止状态的。也就是说,在硬件配置寄存器PERCFG中的I2CoEN位为0,所以在初始化前要在配置I2C模块控制寄存器之前,使能I2C模块。但是,如果要修改PERCFG中的内容,就要先向PCFGLOCK中写入0x10C0010C,对PERCFG解锁。" ]9 G9 Z5 F8 p/ t
, Z( p3 j2 `5 j. B& i8 t# l 1.2 I2C模块的时钟选择0 s+ [1 c9 |; a/ ]9 N. P
8 {: r4 }4 s8 y6 c5 Y, N 在使能I2C模块后,就可以对其控制寄存器进行初始化了。CPU时钟频率为600 MHz,I2C模块规定模块时钟频率必须在7~12 MHz中选值,所以设定I2C模块时钟频率为10 MHz。由图1中的计算公式可得:IPSC为OEh。由于DM642和SAA7115都支持I2C总线的
7 {& z# D0 J P3 s$ l: Z) Z
( k3 o) m) o+ y1 L3 s 400 kbps快速模式,根据IPSC的取值,由图1可知d=5。由此可以设定:ICCL=7,ICCH=8。# R/ Q' R) ]( `* p" Q I+ B
2 u# l1 Y( A4 C1 c) ]. y+ D$ z
1.3 设置从地址时容易遇到的问题, B; K9 h+ V6 R
- U' a- ]' ]# }( T9 @$ k! p* L 需要注意的是,在DM642的I2C应用中经常会遇到不能正确读/写从设备的问题。这是因为DM642对I2C模块的从地址寄存器设置不同于其他芯片的I2C应用。在标准I2C协议中,器件的7位地址格式要将地址和读/写方向位一同送入从地址寄存器。但是,DM642的I2C的应用中只需要向从地址寄存器中送入7位器件地址,读/写方向位由DM642自动生成。例如,SAA7115的标准I2C写从地址为40H# H* V$ O$ y3 O, R6 |
5 @( Y, X) v. ~* U+ F$ I' q8 n |
|
|
|
|