📄 main.c
字号:
#include "config.h"
//#define CAT1025 0xA0 // CAT1025器件从地址
#define FM24C256 0xA0 // CAT1025器件从地址
#define BEEP 1 << 7 // 蜂鸣器BEEP控制口,P0.7,低电平蜂鸣
uint8 data_buf[505],tt1=30;
// 函数名称 :DelayNS()
void DelayNS (uint32 dly)
{
uint32 i;
for ( ; dly>0; dly--)
for (i=0; i<50000; i++);
}
// 函数名称 :I2cInit()
// 函数功能 :I2C初始化
// 入口参数 :Fi2c I2C总线频率(最大400K)
// 出口参数 :无
void I2cInit(uint32 Fi2c)
{
if (Fi2c > 400000)
Fi2c = 400000;
//PINSEL0 = (PINSEL0 & 0xFFFFFF0F) | 0x50; // 设置I2C控制口有效 */
PINSEL0 = (PINSEL0 & (~0xF0)) | 0x50; // 不影响其它管脚连接
I2SCLH = (Fpclk/Fi2c + 1) / 2; // 设定I2C时钟
I2SCLL = (Fpclk/Fi2c)/2;
I2CONCLR = 0x2C;
I2CONSET = 0x40; // 使能主I2C
// 设置I2C中断允许
VICIntSelect = 0x00000000; // 设置所有通道为IRQ中断
VICVectCntl0 = (0x20 | 0x09); // I2C通道分配到IRQ slot0,最高优先级
VICVectAddr0 = (int32)IRQ_I2C; // 设置I2C中断向量
VICIntEnable = (1 << 9); // 使能I2C中断
}
// 函数名称 :main()
// 函数功能 :往CAT1025写入10个数据,然后读回校验。
// 正确的话蜂鸣器蜂鸣1声,否则连续蜂鸣。
// 调试说明 :
int main (void)
{
uint8 i;
PINSEL0 = 0x00000000; // 设置管脚连接GPIO
PINSEL1 = 0x00000000;
IO0DIR = BEEP; // 设置蜂鸣器控制口输出
IO0SET = BEEP; // 先关闭蜂鸣器
IRQEnable(); // 打开中断
I2cInit(100000); // I2C初始化,100K
for (i=0; i<220; i++)
data_buf[i] = 0;//i+'0'; // 数据0~9,转换成ASCII码
//for (i=10; i<250; i++)
// data_buf[i] = 0; // 数据0~9,转换成ASCII码
// 往起始地址0x00开始写入10个数据
// 器件从地址,子地址结构,器件内部物理地址,写入的数据的指针,数据的个数
//I2C_WriteNByte(FM24C256, TWO_BYTE_SUBA, 0x000, data_buf, 201);
//I2C_WriteNByte(FM24C256, TWO_BYTE_SUBA, 0x0C8, data_buf, 201);
//I2C_WriteNByte(FM24C256, TWO_BYTE_SUBA, 0x190, data_buf, 201);
DelayNS(5);
// 清零数据缓冲区,防止出错.
for (i=0; i<220; i++)
data_buf[i] = 0;
// 读回刚才写入的数据.
I2C_ReadNByte(FM24C256, TWO_BYTE_SUBA, 0x00, data_buf, 500);
// 判断读回的数据是否正确.
for (i=1; i<10; i++)
{
if (data_buf[i] != (i-1 + '0'))
{
//while (1)
//{
IO0SET = BEEP; // 出错,连续蜂鸣
//DelayNS(20);
//IO0CLR = BEEP;
//DelayNS(20);
//}
}
}
IO0CLR = BEEP; // 正确,蜂鸣一次
DelayNS(50);
IO0SET = BEEP;
while (1);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -