AW32 IIC 做从机,产生不了中断

[复制链接]
2784|4
 楼主| tarzar 发表于 2008-2-1 08:57 | 显示全部楼层 |阅读模式
iic, vi, ce, ST, ICE
AW32&nbsp;IIC&nbsp;做从机,产生不了中断<br /><br />首先看一下我计算其分频因子是否有错误:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MCU&nbsp;clock&nbsp;speed:&nbsp;3706000&nbsp;Hz<br />Block&nbsp;Module&nbsp;Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Address&nbsp;Range&nbsp;&nbsp;&nbsp;Status<br />&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;FLASH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8000&nbsp;-&nbsp;&nbsp;FFFF&nbsp;&nbsp;&nbsp;Programmed&nbsp;-&nbsp;Unselected<br /><br />希望得到100K速率<br /><br />100&nbsp;000&nbsp;=&nbsp;3706000/(mul*SCL分频数)<br /><br />当mul&nbsp;=&nbsp;01时,SCL分频数&nbsp;=&nbsp;37.06<br /><br />查表(Table&nbsp;13-3.&nbsp;IIC&nbsp;Divider&nbsp;and&nbsp;Hold&nbsp;Values)<br />当SCL分频数36最接近的,即取ICR&nbsp;=&nbsp;0X0A&nbsp;&nbsp;SDA的保持时间为9<br /><br />从而得IIC1F&nbsp;=&nbsp;0x0A<br /><br /><br />程序如下,我用已经好的主机通过IIC去访问该从机,为什么就是产生不了中断,进不了IIC_ISR函数<br /><br />#define&nbsp;&nbsp;DEVICE_I2C_ADR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x40<br /><br />void&nbsp;IIC_init(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;IIC1C&nbsp;=&nbsp;0x00;&nbsp;//禁止IIC模块<br />&nbsp;&nbsp;&nbsp;&nbsp;IIC1F&nbsp;=&nbsp;0x0A;&nbsp;//设成100K<br />&nbsp;&nbsp;&nbsp;&nbsp;IIC1A&nbsp;=&nbsp;DEVICE_I2C_ADR;//设从机地址<br />&nbsp;&nbsp;&nbsp;&nbsp;IIC1S&nbsp;=&nbsp;0x12;&nbsp;//状太寄存器<br />&nbsp;&nbsp;&nbsp;&nbsp;IIC1C&nbsp;=&nbsp;0xC8;<br />&nbsp;&nbsp;&nbsp;&nbsp;//IIC1C_IICEN&nbsp;=&nbsp;1;&nbsp;//IIC模块使能<br />&nbsp;&nbsp;&nbsp;&nbsp;//IIC1C_IICIE&nbsp;=&nbsp;1;&nbsp;//中断使能<br />&nbsp;&nbsp;&nbsp;&nbsp;//IIC1C_MST&nbsp;&nbsp;&nbsp;=&nbsp;0;&nbsp;//IIC模块设为从机<br />&nbsp;&nbsp;&nbsp;&nbsp;//IIC1C_TXAK&nbsp;&nbsp;=&nbsp;0;<br />}<br /><br />interrupt&nbsp;VectorNumber_Viic1&nbsp;void&nbsp;&nbsp;IIC_ISR(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;dummy_dat;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IIC1S_IICIF&nbsp;=&nbsp;1;&nbsp;//清除中断标志位<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(IIC1C_MST&nbsp;==&nbsp;0)&nbsp;//是设成从机吗?&nbsp;&nbsp;&nbsp;不参与仲裁....<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(IIC1S_IAAS&nbsp;==&nbsp;1)&nbsp;//从机地址匹配吗?<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;//设成主机吗?<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />
 楼主| tarzar 发表于 2008-2-1 09:04 | 显示全部楼层

补充,全局中断也有开着

全局中断也有关着<br />void&nbsp;main(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;include&nbsp;your&nbsp;code&nbsp;here&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init_devices();&nbsp;//初始化IO口,和IIC,定时器等<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;init_data();&nbsp;//初始化全局变量<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnableInterrupts;&nbsp;/*&nbsp;enable&nbsp;interrupts&nbsp;*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(;;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__RESET_WATCHDOG();&nbsp;/*&nbsp;feeds&nbsp;the&nbsp;dog&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check_led();&nbsp;&nbsp;&nbsp;&nbsp;//程序运行指示灯<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//delay(500);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;/*&nbsp;loop&nbsp;forever&nbsp;*/<br />&nbsp;&nbsp;/*&nbsp;please&nbsp;make&nbsp;sure&nbsp;that&nbsp;you&nbsp;never&nbsp;leave&nbsp;main&nbsp;*/<br />}
yellowland 发表于 2008-2-23 17:40 | 显示全部楼层

回复主题:AW32 IIC 做从机,产生不了中断

注意initia,<br />1,slave&nbsp;clock&nbsp;来自&nbsp;master&nbsp;clock,无须设置<br />2,&nbsp;II1CS=0X80;&nbsp;//or&nbsp;no&nbsp;change&nbsp;after&nbsp;reset<br />3,&nbsp;确定地址&nbsp;是否需要shift&nbsp;left&nbsp;one&nbsp;bit<br />4,确认中断号是否正确
 楼主| tarzar 发表于 2008-2-24 23:27 | 显示全部楼层

可以中断了,是硬件的SDA和SCL两线接反了。

可以中断了,是硬件的SDA和SCL两线接反了。
hotpower 发表于 2008-2-24 23:28 | 显示全部楼层

晕倒了...

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

81

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部