iic.c

来自「DSP 5509A IIC通讯程序 特点: 1. C寄存器操作」· C语言 代码 · 共 135 行

C
135
字号
#include <csl.h>
#include <csl_chip.h>
#include <csl_gpio>
#include <csl_I2C.h>


	#define setMST (I2CMDR |= 0x0400)
	#define setTRX (I2CMDR |= 0x0200)
	#define clrTRX (I2CMDR &= 0xfdff)
	#define enI2C (I2CMDR |= 0x0020)
	#define disI2C (I2CMDR &= 0xffdf)
	#define setSTT (I2CMDR |= 0x2000)
	#define setSTP (I2CMDR |= 0x0800)
	#define setRM (I2CMDR |= 0x0080)
	#define clrRM (I2CMDR &= 0xff7f)
	#define setNACKMOD (I2CMDR |= 0x8000)

	#define sendByte(sndbyte) (I2CDXR = (sndbyte) & 0x00ff)
	#define setCNT(sndcnt) (I2CCNT = (sndcnt))
	#define setNACK ((I2CSTR) |= 0x0002)

	#define valBB (I2CSTR & 0x1000)
	#define valARDY (I2CSTR & 0x0004)
	#define valNACKSNT (I2CSTR & 0x2000)
	#define valXRDY (I2CSTR & 0x0010)
	#define valRRDY (I2CSTR & 0x0008)
	#define valNACK (I2CSTR & 0x0002)
	#define valI2CMDR I2CMDR
	#define valI2CSTR I2CSTR


void delay();

void main()
{
	int i=0;
	Int16 outdata, indata[0x20], initdata=0;


	CSL_init();


	initdata = 0;

	for (i=0;i<0x20;i++) indata[i]=0;
	{
		outdata = initdata++;
		disI2C;

		setMST;
		setTRX;
		setNACK;
		setRM;
		I2CCLKL = 0x0100;
		I2CCLKH = 0x0100;
		I2CSAR = 0x50;
		I2COAR = 0x01;
		I2CCNT = 0x10;

		enI2C;
	
		setSTT;
		do {
			if (valXRDY)
			{sendByte(0x00);
			break;}
		} while(1);

		do {
			if (valXRDY)
				{sendByte(0x00);
				break;}
		} while(1);

		for (i=0;i<0x020;i++)
		{
			do {
			if (valXRDY)
				{sendByte(outdata++);
				break;}
			} while(1);
		}
	}
	setSTP;
	delay();

	setMST;
	setTRX;
	setNACK;
	setRM;
	setSTT;

	do {
		if (valXRDY)
			{sendByte(0x00);
			break;}
	} while(1);

	do {
		if (valXRDY)
			{sendByte(0x00);
			break;}
	} while(1);

	clrTRX;
	setSTT;

	for (i=0;i<0x020;i++)
	{
		do {
			if (valRRDY)
				{indata[i]=I2CDRR;
				break;}
		} while(1);
	}
		
	setNACKMOD;
	delay();
	setSTP;
	delay();

	while(1){;}  //stop here
} 		 //end main

void delay()
{
	Uint32 j=0, k=0;
	for (j=0;j<0x5;j++)
	{
		for(k=0;k<0xffff;k++)
		{}
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?