用MCU自带的IIC模块程序,不知有错否。SCL波形都没产生。

[复制链接]
3816|6
 楼主| dongshan 发表于 2007-12-10 15:54 | 显示全部楼层 |阅读模式
void&nbsp;IICInit(void)&nbsp;{<br />&nbsp;/*&nbsp;###&nbsp;Init_IIC&nbsp;init&nbsp;code&nbsp;*/<br />&nbsp;/*&nbsp;IICF:&nbsp;MULT1=0,MULT0=1,ICR5=0,ICR4=0,ICR3=0,ICR2=0,ICR1=0,ICR0=0&nbsp;*/<br />&nbsp;&nbsp;IICF&nbsp;=&nbsp;0x40;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;/*&nbsp;IICA:&nbsp;ADDR7=0,ADDR6=0,ADDR5=0,ADDR4=0,ADDR3=0,ADDR2=0,ADDR1=0&nbsp;*/<br />&nbsp;&nbsp;IICA&nbsp;=&nbsp;0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;/*&nbsp;IICS:&nbsp;TCF=0,IAAS=0,BUSY=0,ARBL=1,SRW=0,IICIF=1,RXAK=0&nbsp;*/<br />&nbsp;&nbsp;IICS&nbsp;=&nbsp;0x12;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Clear&nbsp;the&nbsp;interrupt&nbsp;flags&nbsp;*/<br />&nbsp;&nbsp;/*&nbsp;IICC:&nbsp;IICEN=1&nbsp;*/<br />&nbsp;&nbsp;IICC&nbsp;|=&nbsp;(unsigned&nbsp;char)0x80;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;/*&nbsp;IICC:&nbsp;IICEN=1,IICIE=0,MST=0,TX=1,TXAK=0,RSTA=0&nbsp;*/<br />&nbsp;&nbsp;IICC&nbsp;=&nbsp;0x90;&nbsp;&nbsp;&nbsp;<br />}&nbsp;<br /><br />void&nbsp;IICWriteByte(word&nbsp;adr,&nbsp;byte&nbsp;dt){<br />&nbsp;&nbsp;&nbsp;&nbsp;word&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;gAdr=adr;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;(gAdrH&nbsp;&&nbsp;0x01)&nbsp;&lt&lt&nbsp;1;&nbsp;//get&nbsp;A8&nbsp;of&nbsp;24c04&nbsp;address.<br />&nbsp;&nbsp;&nbsp;&nbsp;IICC_TXAK=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICC|=0x30;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//MST=1&nbsp;TX=1&nbsp;&nbsp;and&nbsp;generate&nbsp;START&nbsp;condition<br />&nbsp;&nbsp;&nbsp;&nbsp;IICD&nbsp;=IIC_SLAVE_ADR|temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(!IICS_IICIF);&nbsp;&nbsp;&nbsp;&nbsp;//wait&nbsp;untill&nbsp;TX&nbsp;completed<br />&nbsp;&nbsp;&nbsp;&nbsp;IICS_IICIF=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//clear&nbsp;IICIF<br />&nbsp;&nbsp;&nbsp;&nbsp;while(IICS_RXAK);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//check&nbsp;for&nbsp;slave&nbsp;ack<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICD&nbsp;=&nbsp;gAdrL;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(!IICS_IICIF);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICS_IICIF=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(IICS_RXAK);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICD=dt;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(!IICS_IICIF);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICS_IICIF=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(IICS_RXAK);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICS_IICIF=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICC_MST=0;<br />}<br /><br />void&nbsp;IICWriteN(word&nbsp;adr,byte&nbsp;*dt,byte&nbsp;n){<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;byte&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&ltn;++i)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IICWriteByte(adr+i,dt);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />byte&nbsp;IICReadByte(word&nbsp;adr){<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;word&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;byte&nbsp;d;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;gAdr=adr;<br />&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;(gAdrH&0x01)&lt&lt1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//get&nbsp;A8&nbsp;of&nbsp;24c04&nbsp;address.<br />&nbsp;&nbsp;&nbsp;&nbsp;IICC_TXAK=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICC|=0x30;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//MST=1&nbsp;TX=1&nbsp;&nbsp;and&nbsp;generate&nbsp;START&nbsp;condition<br />&nbsp;&nbsp;&nbsp;&nbsp;IICD&nbsp;=IIC_SLAVE_ADR|temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(!IICS_IICIF);&nbsp;&nbsp;&nbsp;&nbsp;//wait&nbsp;untill&nbsp;TX&nbsp;completed<br />&nbsp;&nbsp;&nbsp;&nbsp;IICS_IICIF=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//clear&nbsp;IICIF<br />&nbsp;&nbsp;&nbsp;&nbsp;while(IICS_RXAK);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//check&nbsp;for&nbsp;slave&nbsp;ack<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICD&nbsp;=&nbsp;gAdrL;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(!IICS_IICIF);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICS_IICIF=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(IICS_RXAK);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICS_IICIF=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICC_RSTA=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICD&nbsp;=IIC_SLAVE_ADR|temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(!IICS_IICIF);&nbsp;&nbsp;&nbsp;&nbsp;//wait&nbsp;untill&nbsp;TX&nbsp;completed<br />&nbsp;&nbsp;&nbsp;&nbsp;IICS_IICIF=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//clear&nbsp;IICIF<br />&nbsp;&nbsp;&nbsp;&nbsp;while(IICS_RXAK);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//check&nbsp;for&nbsp;slave&nbsp;ack<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICC_TX=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICC_TXAK=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;d=IICD;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//dummy&nbsp;read&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(!IICS_IICIF);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICS_IICIF=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICC_MST=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;d=IICD;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;d;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />byte*&nbsp;IICReadN(word&nbsp;adr,byte&nbsp;n){<br />&nbsp;&nbsp;&nbsp;&nbsp;word&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;byte&nbsp;i,d;<br />&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;byte&nbsp;*&nbsp;dt;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;gAdr=adr;<br />&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;(gAdrH&0x01)&lt&lt1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//get&nbsp;A8&nbsp;of&nbsp;24c04&nbsp;address.<br />&nbsp;&nbsp;&nbsp;&nbsp;IICC_TXAK=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICC|=0x30;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//MST=1&nbsp;TX=1&nbsp;&nbsp;and&nbsp;generate&nbsp;START&nbsp;condition<br />&nbsp;&nbsp;&nbsp;&nbsp;IICD&nbsp;=IIC_SLAVE_ADR|temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(!IICS_IICIF);&nbsp;&nbsp;&nbsp;&nbsp;//wait&nbsp;untill&nbsp;TX&nbsp;completed<br />&nbsp;&nbsp;&nbsp;&nbsp;IICS_IICIF=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//clear&nbsp;IICIF<br />&nbsp;&nbsp;&nbsp;&nbsp;while(IICS_RXAK);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//check&nbsp;for&nbsp;slave&nbsp;ack<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICD&nbsp;=&nbsp;gAdrL;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(!IICS_IICIF);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICS_IICIF=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(IICS_RXAK);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICS_IICIF=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICC_RSTA=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICD&nbsp;=IIC_SLAVE_ADR|temp|1;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(!IICS_IICIF);&nbsp;&nbsp;&nbsp;&nbsp;//wait&nbsp;untill&nbsp;TX&nbsp;completed<br />&nbsp;&nbsp;&nbsp;&nbsp;IICS_IICIF=1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//clear&nbsp;IICIF<br />&nbsp;&nbsp;&nbsp;&nbsp;while(IICS_RXAK);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//check&nbsp;for&nbsp;slave&nbsp;ack<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICC_TX=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;//IIC_TXAK=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;d=IICD;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//dummy&nbsp;read&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(!IICS_IICIF);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IICS_IICIF=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt(n-1);++i){<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dt=IICD;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!IICS_IICIF);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IICS_IICIF=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;IICC_TXAK=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;dt=IICD;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(!IICS_IICIF);<br />&nbsp;&nbsp;&nbsp;&nbsp;IICC_MST=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;dt;<br />}
 楼主| dongshan 发表于 2007-12-10 15:57 | 显示全部楼层

芯片是at24c04

  
rodger_br 发表于 2007-12-10 19:55 | 显示全部楼层

SCL是主控产生的

不关at24c04什么事
张明峰 发表于 2007-12-10 21:43 | 显示全部楼层

建议看一下应用笔记

AN3291-How&nbsp;to&nbsp;Use&nbsp;IIC&nbsp;Module&nbsp;on&nbsp;M68HC08&nbsp;HCS08&nbsp;and&nbsp;HCS12&nbsp;MCUs.pdf
 楼主| dongshan 发表于 2007-12-11 09:29 | 显示全部楼层

3楼的

我当然知道你所说的<br /><br />我指出是24c04,主要想说是其存储地址是9位的。占用了器件地址的A0位。所以程序用了:<br />temp&nbsp;=&nbsp;(gAdrH&0x01)&lt&lt1;<br />...<br />IICD&nbsp;=IIC_SLAVE_ADR|temp;<br />
imwangyi 发表于 2007-12-13 10:03 | 显示全部楼层

接上拉了没?

  
 楼主| dongshan 发表于 2007-12-13 22:11 | 显示全部楼层

接了,AT24c04 PI27 应能用于3.3V的吧。

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

本版积分规则

79

主题

1144

帖子

7

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