📄 iic.c
字号:
#include<stdio.h>
#include<csl.h>
#include<csl_i2c.h>
#include <csl_pll.h>
#pragma CODE_SECTION (XRDY_fun,"myfun");
#pragma CODE_SECTION (RRDY_fun,"myfun");
#pragma CODE_SECTION (Reserved_fun,"myfun");
void XRDY_fun(void);
void RRDY_fun(void);
void Reserved_fun(void);
#pragma DATA_SECTION (writedata,"section_xx");
#pragma DATA_SECTION (receivedata,"section_yy");
Uint16 writedata[1],receivedata[1];
I2C_Setup i2csetup=
{
0,//0 7位地址;1 10位地址
0x0000,//自身的地址,仅用于器件为从设备时
144,//系统时钟频率
400,//传输输率400kbps
0,//0 数据为8位
1,//0 关循环模式;1 开循环模式
1 //0 free模式关;1 free模式开
};
PLL_Config pllconfig=
{
0, //iai 退出idle模式后,pll锁定与进入idle模式前的过程相同
1, //iob 相位失锁后,时钟发生器切换到旁路模式,并重新开始PLL的锁相过程
6,//pllmult 乘以12
0//div 除以1 因为输入时钟为12M,所以得到cpu时钟为144M
} ;
I2C_IsrAddr addr = {
Reserved_fun,
Reserved_fun,
Reserved_fun,
RRDY_fun, //数据接收服务函数
XRDY_fun //数据发送服务函数(先保留,需要时可用)
};
main()
{
Uint16 old_intm;
writedata[0]=255;
CSL_init();
PLL_config(&pllconfig);
old_intm=IRQ_globalDisable();
I2C_setup(&i2csetup) ;
I2C_setCallback(&addr);
I2C_eventEnable(I2C_EVT_RRDY);
IRQ_globalEnable();
XRDY_fun( );
while(receivedata[0]!=255) {};
printf("I2C operation is successful\n");
IRQ_globalRestore(old_intm);
}
void XRDY_fun(void)
{
Uint16 x;
x=I2C_write(writedata,1,1,0x00,1,30000);//数组指针,写字节数,0从1主,从地址,S-A-D(N)-P,timeout
if(x==0) printf("write operation is successful\n");
}
void RRDY_fun(void)
{
//Uint16 x;
receivedata[0]=I2C_readByte();
//x=I2C_read(receivedata,1,0,0x00,1,30000,0);//数组指针,读字节数,0从1主,从地址,S-A-D(N)-P,timeout,checkbus
//if(x==0) printf("read operation is successful\n");
}
void Reserved_fun(void) {return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -