历史上的今天
今天是:2025年03月18日(星期二)
2019年03月18日 | s3c2440A操作24C08
2019-03-18 来源:eefocus
我这里实现的是非中断模式下的IIC操作
数据手册和代码对照着很容易看懂,尤其是数据手册上IIC那一章的几张程序流程图,一目了然。
下面是代码:
//这里没有用精确延时
void delay1()
{
int i = 0;
int j = 0;
for(i = 0; i < 100; i++)
{
for(j = 0; j < 100; j++);
}
}
/*************************************************************
Function name: IIC_Init
Description: Initialize IIC registers
Parameters: None
Returns: None
**************************************************************/
void IIC_Init()
{
//GPE14:IICSCL GPE15:IICSDA
rGPECON = rGPECON & (~(0xf << 28)) | (0xa << 28);
//GPE14 GPE15 poll up function disabled
rGPEUP = 0xc000;
//rIICCON[7] = 1: enable IIC_bus acknowledge bit
//rIICCON[6] = 0: IICCLK = fPCLK / 16
//rIICCON[5] = 1: Tx/Rx interrupt enable
//rIICCON[3..0]: Tx clock = IICCLK/(IICCON[3:0]+1)
rIICCON = (1 << 7) | (0 << 6) | (1 << 5) | 0x0f;
//rIICSTAT[4] = 1: enable Rx/Tx
rIICSTAT = (1 << 4);
rIICADD = 0x10;
}
/*************************************************************
Function name: Write24C08_nbyte
Description: Write data to 24C08
Parameters: slave_addr: the address of IIC device, often set to "0xa0"
IIC_addr: exact data address
IIC_data: value of data
Returns: None
**************************************************************/
void Write24C08_nbyte(unsigned int slave_addr, unsigned int IIC_addr, unsigned char IIC_data)
{
unsigned int i = 0;
unsigned int j = 0;
rIICDS = slave_addr; //从设备地址
//rIICSTAT[7:6]:11--master Tx mode
//rIICSTAT[5]: 1--start signal
//rIICSTAT[4]: 1--enable Rx/Tx
rIICSTAT = 0xf0; //开始写
while(!(rIICCON & 0x10)); //等待应答信号,该位为1,收到应答
rIICDS = IIC_addr; //向移位寄存器送数据:数据地址
for(i = 0; i < 10; i++);
rIICCON = 0xaf;
while(!(rIICCON & 0x10));
rIICDS = IIC_data; //向移位寄存器送数据
rIICCON = 0xaf; //rIICCON[4] = 0:清空挂起位
while(!(rIICCON & 0x10));
Uart_Printf("Send %d data %d to IIC\n", IIC_addr, IIC_data);
rIICSTAT = 0xd0; //rIICSTAT[5] = 0:STOP signal generation when write,停止信号
rIICCON = 0xaf; //清空挂起位
for(i = 0; i < 10; i++);
}
/*************************************************************
Function name: Read24C08_nbyte
Description: Read data from 24C08
Parameters: slave_addr: the address of IIC device, often set to "0xa0"
IIC_addr: exact data address
databuffer: used to storage data value
Returns: None
**************************************************************/
void Read24C08_nbyte(U32 slave_addr,U32 IIC_addr,U8 *databuffer)
{
unsigned int i = 0;
unsigned int j = 0;
unsigned int add_in = IIC_addr;
U32 temp = 0;
U32 tt = 0;
rIICDS = slave_addr;//0xa0
rIICSTAT = 0xf0; //开启IIC写功能,写IIC地址
while(!(rIICCON & 0x10));
rIICDS = (U8)add_in; //数据具体地址
for(i=0;i<10;i++);
rIICCON = 0xaf; //清空挂起标志位resumes IIC operation.
while(!(rIICCON & 0x10));
rIICDS = slave_addr;
rIICSTAT = 0xb0; //bit[7:6]:10--master Rx mode,master receive mode
rIICCON = 0xaf;
while(!(rIICCON & 0x10));
temp = rIICDS;
rIICCON = 0x2f;
for(i=0;i<10;i++);
while(!(rIICCON & 0x10));
tt = rIICDS;
Uart_Printf("databuffer = 0x%x, %d IIC_addr = %d, temp = %d\n", tt, tt, IIC_addr, temp);
rIICSTAT = 0x90; //停止读
rIICCON = 0xaf;
delay1();
}
史海拾趣
|
comman.bib里为什么有那么多的冒号啊,屏蔽了那么多的东西,比如: ; @CESYSGEN IF FONTS_ARIALBD_1_08 ; arialbd.ttf $(_WINCEROOT)\\public\\common\\oak\\files\\arialbd_1_08.ttf & ...… 查看全部问答> |
|
以太网初始化的发生reset错误,不知道什么原因,是从cs8900的lib文件中调用的函数 Initiating image download in 3 seconds. Starting auto-download ... memorybase:FLAG^_^CS8900: MAC Address: ff:31:4:0:ff:31 ERROR: Reset: Reset failed ...… 查看全部问答> |
|
论坛潜水很久啦,看高人如过江之鲫…… 看到很多高手都要很多板子,羡慕哟,问下大家你们的板子都来自哪里呀 我手上只有一块51的开发板,淘宝上买的,寒酸哟,最近准备入手arm……… 查看全部问答> |
|
我在搭建vxworks5.5 下的文件系统TFFS,现在MTD程序写完了我要怎么调试,tffsShow 这个函数调用通过了,下面怎么走 我使用usrtffsconfig(0,0,“/tffs0”) 出错? … 查看全部问答> |
|
请教关于用lwip在lm3s9b96上面做服务器端不断开连接持续接受客户端发送的数据 参考academic的程序在9b96上面用lwip raw api做成服务端,当客户端每次发送数据给服务器端时服务器端都会在接受数据后断开连接,代码参考academic的enet_tcp。 我将close_tcp()函数在App_sent()函数里面注释掉后,同时改变里面tcp_re ...… 查看全部问答> |
|
最近想深入学习一下LM3S9B96或者LM4F232,就是官网带液晶那种,可以跑跑操作系统,进行cotex-M3的深入学习,不知道论坛坛友们有没有闲置的可以借用呀呵呵!!!不胜感激,嘿嘿!!!! [ 本帖最后由 鑫海宝贝 于 2012-5-22 14:57 编辑 ]… 查看全部问答> |




