📄 2407-flash.c
字号:
#include "f2407_c.h" //引用头部文件
#include "stdlib.h"
#define page_byte 1056
ioport unsigned int port0; //port100 address
#define FLASH port0
int PAGE10;
int j,k;
int p;
int maker,code,xx,cy,cy1;
int markdata[page_byte];
void system_init(); //声明在程序中需要用到是函数
void flash(int row);
void flashID();
void wait();
//(1)主程序
main()
{
int wemp1,wemp2,wemp3,wemp4;
system_init(); //系统初始化子程序
flashID();
p=65;
flash(p);
//CAN初始化子程序
while(1)
{
int i;
int a,b,c,d;
for(p=0;p<64000;p++)
{
flash(p);
for(i=510;i<511;i++)
{
a=(markdata[i]&0xff);
b=(markdata[i+1]&0xff);
c=(markdata[i+2]&0xff);
//d=(markdata[i+3]&0xff);
//if((a==0xEB)&&(b==0x58)&&(c==0x90))
//if((a==0x00)&&(b==0x55)&&(c==0xAA))
if((a==0x55)&&(b==0xAA))
{
wait();
}
}
}
while(1)
{
}
}
}
void wait()
{
while(1)
{
}
}
//(2) 系统初始化子程序
void system_init()
{
asm(" setc SXM"); // 抑制符号位扩展
asm(" clrc OVM"); // 累加器中结果正常溢出
asm(" clrc CNF"); // B0被配置为数据存储空间
asm(" setc INTM"); // 禁止所有中断
SCSR1=0xED1; // CLKIN=12M,CLKOUT=2CLKIN=24M=2D1
SCSR2=0x0E;
WDCR=0x68; // 不使能看门狗,因为SCSR2中的WDOVERRIDE
// 即WD复位后的缺省值,故可以用
// 软件禁止看门狗
MCRA=0x3; // IOPA3,IOPA4,IOPA5,IOPB端口配置为一般的I/O功能, TMS320LF240x的
MCRB=0x0DF; // 端口均为8位,MCRA为16位因此控制了IOPA和IOPB的设置
MCRC=0;
PB=0x2FFF; // IOPB端口设置为输入方式
PA=0x03FF; //IOPA3,IOPA4,IOPA5 设置为输出方式,且IOINEN=1,选通8路开关量输入
PC=0xFFFF; // IOPB端口设置为输入方式
PD=0xFFFF;
PE=0xFFFF;
PF=0xFFFF;
SCICCR=0x7; //1个停止位,不使能奇偶校验,空闲线多处理
//器模式,8位字符
SCICTL1=0x13; //使能接收和发送,SLEEP=0 禁止休眠方式
//禁止接收错误中断,TXWAKE=0 即没有选定的发送特征
SCICTL2=0x2; //使能接收中断
SCIHBAUD=0x1;
SCILBAUD=0x38; //波特率=9600B/S
SCICTL1=0x33; //使SCI脱离复位状态
SCIPRI=0x60; //SCI中断(接收和发送中断)为低优先级中断
PE=(PE&0xFFFE);
//IMR=0x010; // 开中断优先级5
IFR=0x0FFFF; // 清除全部中断标志,"写1清0
//PB=(PB&BIT5F);
}
void flash(int row)
{
int i;
int Npage;
int column;
int columnh,rowh;
column=0;
columnh=((column>>8)|0xFF00);
rowh=((row>>8)|0xFF00);
row|=0xFF00;
PB &=BIT5F; //选择FLASH
Npage=row;
PC |=BIT5; //245写有效
for(j=0;j<0x0Ff;j++);
PB |=0x0F;
PB &=0xFFFD; //ALE-L
PB &=0xFFFC; //WE-L
port0=0x00;
PB |=0x01; //WE-H
PB |=0x0F; //-H
for(j=0;j<0x0FF;j++);
PB |=0x0F;
PB &=0xFFFB; //CLE-L
PB &=0xFFFA; //WE-L
port0=column;
PB |=0x01; //WE-H
PB |=0x0F;
PB &=0xFFFB;
PB &=0xFFFA;
port0=columnh;
PB |=0x01;
PB |=0x0F;
PB &=0xFFFB;
PB &=0xFFFA;
port0=row;
PB |=0x01;
PB |=0x0F;
PB &=0xFFFB;
PB &=0xFFFA;
port0=rowh;
PB |=0x01;
PB |=0x0F;
for(j=0;j<0x0FF;j++);
PB |=0x0F;
PB &=0xFFFD;
PB &=0xFFFC; //COM
port0=0x30;
PB |=0x01;
PB |=0x0F;
//PB |=0x0F;
for(j=0;j<0x0FF;j++);
PC &=BIT5F;
//for(i=Npage;i<(Npage+1024);i++)
for(j=0;j<0x0FFF;j++);
PC &=BIT5F;
for(i=0;i<1064;i++)
{
PB &=0xFFF1;
//for(j=0;j<0x04;j++);
markdata[i]=port0; //选择FLASH
// markdata[i]=port0; //选择FLASH
PB |=0x08;
//PB |=0x08;
// PB |=0x08;
//PB |=0x08;
}
PC |=BIT5;
PB |=BIT5; //选择FLASH
}
void flashID()
{
PB &=BIT5F; //选择FLASH
PC |=BIT5; //245写有效
for(j=0;j<0x0Ff;j++);
PB |=0x0F;
PB &=0xFFFD; //ALE-L
PB &=0xFFFC; //WE-L
FLASH=0x90;
PB |=0x01; //WE-H
PB |=0x0F; //-H
PB |=0x0F;
PB &=0xFFFB; //CLE-L
PB &=0xFFFA; //WE-L
FLASH=0;
PB |=0x01; //WE-H
PB |=0x0F;
for(j=0;j<0x0f;j++);
PC &=BIT5F;
PB &=0xFFF1;
//for(j=0;j<0x04;j++);
maker=FLASH; //选择FLASH
//maker=FLASH; //选择FLASH
PB |=0x08;
// PB |=0x08;
//PB |=0x08;
// PB |=0x08;
PB &=0xFFF1;
//for(j=0;j<0x04;j++);
code=FLASH; //选择FLASH
PB |=0x08;
//PB |=0x08;
//PB |=0x08;
// PB |=0x08;
PB &=0xFFF1;
// for(j=0;j<0x04;j++);
xx=FLASH; //选择FLASH
PB |=0x08;
// PB |=0x08;
//PB |=0x08;
// PB |=0x08;
PB &=0xFFF1;
//for(j=0;j<0x04;j++);
cy=FLASH; //选择FLASH
PB |=0x08;
//PB |=0x08;
//PB |=0x08;
//PB |=0x08;
PB &=0xFFF1;
//for(j=0;j<0x04;j++);
cy1=FLASH; //选择FLASH
PB |=0x08;
// PB |=0x08;
// PB |=0x08;
//PB |=0x08;
PC |=BIT5;
PB |=BIT5; //选择FLASH
}
// 直接返回中断服务程序
void interrupt int1( )
{
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -