新聞中心

S3C2440-IIC

作者: 時(shí)間:2016-12-02 來(lái)源:網(wǎng)絡(luò) 收藏
IIC(Inter-Integrated Circuit,I2C)總線是一種由PHILIPS公司開(kāi)發(fā)的兩線式串行總線,用于連接微處理器及其外圍設(shè)備,它的最主要優(yōu)點(diǎn)是簡(jiǎn)單和有效。它只需要數(shù)據(jù)線SDA和時(shí)鐘線SCL,就能夠?qū)崿F(xiàn)CPU與被控IC之間、IC與IC之間進(jìn)行雙向傳送。
s3c2440內(nèi)部有一個(gè)IIC總線接口,因此為我們連接帶有IIC通信模塊的外圍設(shè)備提供了便利。它具有四種操作模式:主設(shè)備發(fā)送模式、主設(shè)備接收模式、從設(shè)備發(fā)送模式和從設(shè)備接收模式。在這里我們只把s3c2440當(dāng)做IIC總線的主設(shè)備來(lái)使用,因此只介紹前兩種操作模式。在主設(shè)備發(fā)送模式下,它的工作流程為:首先配置IIC模式,然后把從設(shè)備地址寫(xiě)入接收發(fā)送數(shù)據(jù)移位寄存器IICDS中,再把0xF0寫(xiě)入控制狀態(tài)寄存器IICSTAT中,這時(shí)等待從設(shè)備發(fā)送應(yīng)答信號(hào),如果想要繼續(xù)發(fā)送數(shù)據(jù),那么在接收到應(yīng)答信號(hào)后,再把待發(fā)送的數(shù)據(jù)寫(xiě)入寄存器IICDS中,清除中斷標(biāo)志后,再次等待應(yīng)答信號(hào);如果不想再發(fā)送數(shù)據(jù)了,那么把0x90寫(xiě)入寄存器IICSTAT中,清除中斷標(biāo)志并等待停止條件后,即完成了一次主設(shè)備的發(fā)送。在主設(shè)備接收模式下,它的工作流程為:首先配置IIC模式,然后把從設(shè)備地址寫(xiě)入接收發(fā)送數(shù)據(jù)移位寄存器IICDS中,再把0xB0寫(xiě)入控制狀態(tài)寄存器IICSTAT中,這時(shí)等待從設(shè)備發(fā)送應(yīng)答信號(hào),如果想要接收數(shù)據(jù),那么在應(yīng)答信號(hào)后,讀取寄存器IICDS,清除中斷標(biāo)志;如果不想接收數(shù)據(jù)了,那么就向寄存器IICSTAT寫(xiě)入0x90,清除中斷標(biāo)志并等待停止條件后,即完成了一次主設(shè)備的接收。在完成上述兩個(gè)模式時(shí),主要用到了控制寄存器IICCON、控制狀態(tài)寄存器IICSTAT和發(fā)送接收數(shù)據(jù)移位寄存器IICDS。由于我們只把s3c2440當(dāng)做主設(shè)備來(lái)用,并且系統(tǒng)的IIC總線上只有這么一個(gè)主設(shè)備,因此用來(lái)設(shè)置從設(shè)備地址的地址寄存器IICADD,和用于仲裁總線的多主設(shè)備線路控制寄存器IICLC都無(wú)需配置。寄存器IICCON的第6位和低4位用于設(shè)置IIC的時(shí)鐘頻率,因?yàn)镮IC的時(shí)鐘線SCL都是由主設(shè)備提供的。s3c2440的IIC時(shí)鐘源為PCLK,當(dāng)系統(tǒng)的PCLK為50MHz,而從設(shè)備最高需要100kHz時(shí),可以將IICCON的第6位置1,IICCON的低4位全為0即可。寄存器IICCON的第7位用于設(shè)置是否發(fā)出應(yīng)答信號(hào),第5位用于是否使能發(fā)送和接收中斷,第4位用于中斷的標(biāo)志,當(dāng)接收或發(fā)送數(shù)據(jù)后一定要對(duì)該位進(jìn)行清零,以清除中斷標(biāo)志。寄存器IICSTAT的高2位用于設(shè)置是哪種操作模式,當(dāng)向第5位寫(xiě)0或?qū)?時(shí),則表示結(jié)束IIC或開(kāi)始IIC通訊,第4位用于是否使能接收/發(fā)送數(shù)據(jù)。
#include "2440addr.h"
#define U32 unsigned int
unsigned char iic_buffer[8];
U32 length;
unsigned char add, word;
int cmd, flag, count, command;
void delay(int a)
{
int k;
for(k=0;k<a;k++)
;
}
void __irq UART0_ISR(void){
char ch;
rSRCPND |= (0x1<<28);
rINTPND |= (0x1<<28);
rSUBSRCPND |= 0x1<<0;
if(rUTRSTAT0 & 0x1){
ch = rURXH0;
while(!(rUTRSTAT0&0x4));
rUTXH0 = ch;
if(count == 0)
command = ch;
if(command == 0xa1){
if(count == 1){
add = ch;
}
else
if(count == 2){
word = ch;
}
else
if(count == 3){
length = ch;
}
else if(count >= 4)
{
iic_buffer[count-4] = ch;
if(count == length+3){
count = -1;
cmd = 0x01;
}
}
count++;
}
else if(command == 0xa2)
{
if(count == 1)
add = ch;
else
if(count == 2)
word = ch;
else
if(count == 3){
length = ch;
count = -1;
cmd = 0x02;
}
count++;
}
}
}
上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: S3C2440IIC串行總

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉