1、编译环境的安装
2、调试器烧写程序以及驱动的安装
3、从新建文件到详细的设置步骤
4、IO口操作调试(LED操作)
5、定时器调试(点亮与熄灭LED)
6、LIN-UART调试
7、AD转换器的调试
8、外部中断的调试
希望这些手记能带给朋友们一点点的帮助,下次总结一下容易出错的问题以及解决方法!!
中断向量解释:
例如:
ILR0 = 0xCF; // IRQ0: external interrupt ch4 --> 01
// IRQ1: external interrupt ch5 --> 01
// IRQ2: external interrupt ch2 | ch6 --> 01
// IRQ3: external interrupt ch3 | ch7 --> 01
ILRx(x=0-5),每个x里面包含有四个中断,每个中断占用两位
CF=11 00 11 11
那么表示的是:
11:--IRQ3
00:--IRQ2
11:--IRQ1
11:--IRQ0
即高位表示的是后面的中断,地位表示的是最开始的中断
优先级可以设置为0-3级
优先级:ILR0>ILR5,同一级里面,设置的数值越小,那么优先级就越大,也就是00>11
模拟I2C程序,EEPROM器件是:AT24C1024,也就是1k bit的,即128k字节
通过串口程序来验证:先写I2C,后读I2C,两者的数相同!!(以下程序中的puts:为串口输出的字符,串口程序参考的UART实验)
#include "mb95200.h"
u8 E0; //非应答信号标志位
u8 NACK=0; //错误标志位
#define SDA PDR0_P06
#define SDA_D DDR0_P06
#define SCL PDR0_P05
#define SCL_D DDR0_P05
#define WriteDeviceAddress 0xa0 //写I2C外围器件的寻址地址
#define ReadDeviceAddress 0xa1 //读I2C外围器件的寻址地址
void WriteI2C(u8 *Wdata,u8 RomAddress,u8 number); // 写n个字节数据子程序
void ReadI2C(u8 *RamAddress,u8 RomAddress,u8 bytes); // 读n个字节数据子程序
void delay5us(u16 len)
{
u16 i;
for(i=0;i<len;i++)
__wait_nop();
}
void Start(void) //启动I2C总线子函数
{
SCL_D=1;
SCL=1;
SDA_D=1;
SDA=1;
delay5us(5);
SDA=0;
delay5us(5);
SCL=0;
}
void Write8Bit(u8 n) //写一个字节数据子程序,n为待发送的数据
{
u8 i,temp;
for(i=8;i>0;i--)
{
SCL_D=1;
SDA_D=1;
temp=n&0x80;
if(temp==0x80) SDA=1;
else SDA=0;
SCL=1;
delay5us(5);
SCL=0;
SDA=0;
n=n<<1;
}
}
void Stop(void) //停止I2C总线数据传送子函数
{
SDA_D=1;
SDA=0;
SCL_D=1;
SCL=1;
delay5us(5);
SDA=1;
delay5us(5);
SCL=0;
}
void Ack(void) //发送应答位子程序
{
SDA_D=1;
SDA=0;
SCL_D=1;
SCL=1;
delay5us(5);
SCL=0;
SDA=1;
}
void NoAck(void) //发送非应答位子程序
{
SDA_D=1;
SDA=0;
SCL_D=1;
SCL=1;
delay5us(5);
SCL=0;
SDA=0;
}
void TestAck(void) //应答位检查子程序,若检测不到非应答信号
{
SDA=1;
SCL=1;
SDA_D=0;
E0=0;
delay5us(1);
if(SDA==1) E0=1;
SCL=0;
}
u8 Read8Bit(void) //读一个字节数据子程序
{
uchar temp,rbyte=0;
for(temp=8;temp>0;temp--)
{
SDA_D=0;
SDA=1;
SCL_D=1;
SCL=1;
delay5us(5);
rbyte=rbyte<<1;
rbyte=rbyte|((u8)(SDA));
SCL=0;
}
return(rbyte);
}
void WriteI2C(u8 *Wdata,u8 RomAddress,u8 number) // 写n个字节数据子程序
{ //*Wdata为待发送数据的首地址,RomAddress为待I2C外围器件的数据写入首地址,number为写字节的个数
Start(); //启动
Write8Bit(WriteDeviceAddress); //写入器件的寻址地址
TestAck(); //应答检查
if(E0==1)
{
NACK=1; //若非应答表明器件错误或已坏,置错误标志位NACK
puts("NACK00\n");
return;
}
Write8Bit(0x00); //写入I2C器件页地址
TestAck(); //应答检查
if(E0==1)
{
NACK=1; //若非应答表明器件错误或已坏,置错误标志位NACK
puts("NACK01\n");
return;
}
Write8Bit(RomAddress); //写入I2C器件的数据存储首地址
TestAck(); //应答检查
if(E0==1)
{
NACK=1; //若非应答表明器件错误或已坏,置错误标志位NACK
puts("NACK02\n");
return;
}
//zhai start
//zhai end
for(;number!=0;number--) //循环,逐个字节发送
{
Write8Bit(*Wdata); //写一个字节
TestAck(); //应答检查
if(E0==1)
{
NACK=1; //若非应答表明器件错误或已坏,置错误标志位NACK
puts("NACK03\n");
return;
}
Wdata++; //指针增加,指向下一个数据
}
Stop(); //全部发送完则停止
}
void ReadI2C(u8 *RamAddress,u8 RomAddress,u8 bytes) // 读n个字节数据子程序
{ //RamAddress为接收数据缓冲区的首地址,RomAddress为待I2C外围器件的数据读取首地址,bytes为写字节的个数
Start(); //启动
Write8Bit(WriteDeviceAddress); //写入器件的寻址地址
TestAck(); //应答检查
if(E0==1)
{
NACK=1; //若非应答表明器件错误或已坏,置错误标志位NACK
puts("NACK10\n");
return;
}
Write8Bit(0x00); //写入I2C器件页地址
TestAck(); //应答检查
if(E0==1)
{
NACK=1; //若非应答表明器件错误或已坏,置错误标志位NACK
puts("NACK11\n");
return;
}
Write8Bit(RomAddress); //写入I2C器件内部数据的读取首地址(页内地址)
TestAck(); //应答检查
if(E0==1)
{
NACK=1; //若非应答表明器件错误或已坏,置错误标志位NACK
puts("NACK12\n");
return;
}
Start(); //重新启动
Write8Bit(ReadDeviceAddress); //写入器件的寻址地址 0xA1
TestAck(); //应答检查
if(E0==1)
{
NACK=1; //若非应答表明器件错误或已坏,置错误标志位NACK
puts("NACK13\n");
return;
}
while(bytes!=1) //循环读入字节数据
{
*RamAddress=Read8Bit(); //读入一个字节
Ack(); //应答
RamAddress++; //地址指针递增
bytes--; //待读入数据个数递
}
*RamAddress=Read8Bit(); //读入最后一个字节数据
NoAck(); //非应答
Stop(); //停止
}
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |