S3C2440A IIC驱动(AT24c04)
来源:互联网 发布:java反射机制原理 编辑:程序博客网 时间:2024/06/01 17:23
int f_nGetACK;
/*********************************************************************************
* name: iic_test
* func: test iic
* para: none
* ret: none
* modify:
* comment:
*********************************************************************************/
void iic_test(void)
{
char szData[16] = "liuzhiping";
unsigned int i;
Uart_Printf("\n IIC Protocol Test Example, using AT24C04...\n");
Uart_Printf(" Write char 0-f into AT24C04\n");
f_nGetACK = 0;
// Enable interrupt
rINTMOD = 0x0;
ClearPending(BIT_IIC);
rINTMSK &= ~BIT_IIC;
pISR_IIC = (unsigned)iic_int_24c04;
// Initialize iic
rIICADD = 0x10; // S3C2410X slave address
rIICCON = 0xaf; // Enable ACK, interrupt, SET IICCLK=MCLK/16
rIICSTAT = 0x10; // Enable TX/RX
// Write 0 - 16 to 24C04
for(i=0; i<16; i++)
{
iic_write_24c040(0xa0, i, szData[i]);
Uart_Printf(" %d", szData[i]);
Delay(10);
}
// Clear array
for(i=0; i<16; i++)
szData[i]=0;
// Read 16 byte from 24C04
for(i=0; i<16; i++)
iic_read_24c040(0xa0, i, &(szData[i]));
// Printf read data
Uart_Printf(" \nRead 16 bytes from AT24C04\n");
for(i=0; i<16; i++)
{
Uart_Printf(" %c ", szData[i]);
}
rINTMSK |= BIT_IIC;
Uart_Printf("\n end.\n");
}
/*********************************************************************************
* name: iic_write_24c040
* func: write data to 24C040
* para: unSlaveAddr --- input, chip slave address
* unAddr --- input, data address
* ucData --- input, data value
* ret: none
* modify:
* comment:
*********************************************************************************/
void iic_write_24c040(unsigned int unSlaveAddr, unsigned int unAddr, char ucData)
{
f_nGetACK = 0;
// Send control byte
rIICDS = unSlaveAddr; // 0xa0
rIICSTAT = 0xf0; // Master Tx,Start
while(f_nGetACK == 0) // Wait ACK
{
Delay(1);/*必须延时1ms*/
}
f_nGetACK = 0;
//Send address
rIICDS = unAddr;
rIICCON = 0xaf; // Resumes IIC operation.
while(f_nGetACK == 0) // Wait ACK
{
Delay(1);/*必须延时1ms*/
}
f_nGetACK = 0;
// Send data
rIICDS = ucData;
rIICCON = 0xaf; // Resumes IIC operation.
while(f_nGetACK == 0) // Wait ACK
{
Delay(1);/*必须延时1ms*/
}
f_nGetACK = 0;
// End send
rIICSTAT = 0xd0; // Stop Master Tx condition
rIICCON = 0xaf; // Resumes IIC operation.
Delay(5); // Wait until stop condtion is in effect.
}
/********************************************************************************
* name: iic_read_24c040
* func: read data from 24C040
* para: unSlaveAddr --- input, chip slave address
* unAddr --- input, data address
* pData --- output, data pointer
* ret: none
* modify:
* comment:
*********************************************************************************/
void iic_read_24c040(unsigned int unSlaveAddr, unsigned int unAddr, char *pData)
{
char cRecvByte;
f_nGetACK = 0;
//Send control byte
rIICDS = unSlaveAddr; // 0xa0
rIICSTAT = 0xf0; // Master Tx,Start
while(f_nGetACK == 0) // Wait ACK
{
Delay(1);/*必须延时1ms*/
}
f_nGetACK = 0;
// Send address
rIICDS = unAddr;
rIICCON = 0xaf; // Resumes IIC operation.
while(f_nGetACK == 0) // Wait ACK
{
Delay(1);/*必须延时1ms*/
}
f_nGetACK = 0;
//Send control byte
rIICDS = unSlaveAddr; // 0xa0
rIICSTAT = 0xb0; // Master Rx,Start
rIICCON = 0xaf; // Resumes IIC operation.
while(f_nGetACK == 0) // Wait ACK
{
Delay(1);/*必须延时1ms*/
}
f_nGetACK = 0;
//Get data
cRecvByte = rIICDS;
rIICCON = 0x2f;
Delay(1);
// Get data
cRecvByte = rIICDS;
// End receive
rIICSTAT = 0x90; // Stop Master Rx condition
rIICCON = 0xaf; // Resumes IIC operation.
Delay(5); // Wait until stop condtion is in effect.
*pData = cRecvByte;
}
/*********************************************************************************
* name: iic_int_24c04()
* func: IIC interrupt handler
* para: none
* ret: none
* modify:
* comment:
*********************************************************************************/
void __irq iic_int_24c04(void)
{
ClearPending(BIT_IIC);
f_nGetACK = 1;
}
芯片:S3C2440A
iic从设备:AT24C04
这份代码基本是从网上拷贝的,在此谢谢网上的大牛们,小弟向你们致敬,忘了原创大牛是谁,就没写转载地址,请大牛谅解哦。
心得:开始这份代码怎么也不能用,后来在每个while(f_nGetACK == 0)循环中添加了个延时,就可以用了,但还不知道原理,先用着吧!希望给后来的兄弟有帮助。
0
上一篇:windows ssh登录debian
下一篇:程序的自我改写
相关热门文章
- shell中字符串操作
- shell中的特殊字符
- linux守护进程的几个关键地方...
- stagefright与opencore对比
- 嵌入式Linux之我行——u-boot-...
- 修改默认端口为222,centos自...
- 用PHP做一个ftp登录页面...
- Toad for Oracle工具,为什么在...
- 本地win7安装vmw9系统winserv...
- powermt config是所什么用的...
给主人留下些什么吧!~~
评论热议
- S3C2440A IIC驱动(AT24c04)
- Windows CE6.0 S3C2440A IIC驱动编码解析
- At24C04
- IIC驱动
- iic驱动
- S3C2440A
- S3C2440A
- IIC控制器驱动流程
- IIC总线驱动架构
- IIC驱动分析
- Linux IIC驱动笔记
- IIC总线驱动基础知识
- IIC总线驱动基础知识
- linux IIC 驱动
- linux IIC驱动笔记
- linux IIC驱动分析
- linux IIC驱动笔记
- Linux IIC驱动笔记
- debian 5常用软件包名称,及安装方法
- 网易debian 5的软件源
- debian下启动telnet服务
- 在linux内核驱动树中添加自己的驱动
- windows ssh登录debian
- S3C2440A IIC驱动(AT24c04)
- putty远程ssh到linux
- 程序的自我改写
- Linux常用命令(不定期更新)
- java中调用C语言代码
- svn服务器部署
- hdu 1397 Goldbach's Conjecture
- String.prototype实现的一些javascript函数介绍
- apt命令
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
男生沙宣头发型图片
斜刘海沙宣头发型图片
沙宣头烫发发型图片
发型沙宣头
短发沙宣头图片
沙宣头怎么扎好看
女士沙宣头
短发沙宣头
沙宣头波波头
不对称短发沙宣头
学生沙宣头
沙宣头怎么扎
什么是沙宣头
沙宣头短发
沙宣头新娘发型
波波头型
齐肩长发
什么脸型适合沙宣头图
沙家浜
沙家浜风景区
沙家浜故事简介
沙家浜经典唱段
沙家浜旅游攻略
沙家浜简介
沙家浜风景区旅游
沙家浜在哪里
京剧沙家浜全剧
沙家浜门票
沙家浜在哪
沙家浜第九场
沙家浜温泉怎么样
沙家浜大闸蟹价格
京剧沙家浜mp3
沙家浜沙奶奶唱段
沙家浜京剧全唱段
沙家浜招聘
沙家浜景区饭店
沙家浜阿庆嫂唱段
常熟沙家浜房价
沙家浜京剧mp4下载
沙家浜豫剧