📄 write_flash.c
字号:
#include <std.h>
#include <string.h>
#include <stdio.h>
#include "write_flashcfg.h"
void dsp_init();
int mcbsp_init();
void flash_earse();
void flash_program(long code_len);
Uint16 err = 0;
Uint16 old_intm;
Uint16 rcvEventId, xmtEventId;
int code_low=0,code_high=0;
long code_length = 0;
unsigned long display=0;
unsigned int a=0;
int ioport *port0;
int ioport *port1;
/*-----------------------------------------------------------------*/
Uint16 MCBSP_read8(MCBSP_Handle _MCBSP) {
Uint16 val;
MCBSP_ASSERT_HANDLE(_MCBSP,return 0xFFFFFFFF);
val = _PREG_GET(((MCBSP_PrivateObj*)_MCBSP)->Drr1Addr);
return (val & 0x00ff);
}
/*-----------------------------------------------------------------*/
void MCBSP_write8(MCBSP_Handle _MCBSP,Uint16 Val) {
MCBSP_ASSERT_HANDLE(_MCBSP,return);
_PREG_SET((((MCBSP_PrivateObj*)_MCBSP)->Dxr1Addr),(Val & 0xff));
}
main()
{
long i;
int ioport * EBCR;
dsp_init();
mcbsp_init();
EBCR=(int *)0x6c00;
*EBCR=0x01;
*(int *)0x600014 = 0x1;//LED3 OFF
*(int *)0x600004 = 0x0;//LED1 OFF
*(int *)0x600005 = 0x0;//LED2 OFF
*(int *)0x600004 = 0x1;//LED1 ON
flash_earse();
for(i=0;i<6000000;i++);
*(int *)0x600004 = 0x0;//LED1 OFF
*(int *)0x600005 = 0x1;//LED2 ON
code_low = *(int *)0x800b;
code_high = *(int *)0x800c;
code_length = ((long)code_high<<16)|code_low;
flash_program(code_length);
*(int *)0x600005 = 0x0;//LED2 OFF
exit(0);
}
void dsp_init()
{
port0=(int *)0x6c00;
*port0=0x1;
}
int mcbsp_init()
{
old_intm = IRQ_globalDisable();
// Get Event Id's associated with MCBSP 0 receive and transmit
rcvEventId = MCBSP_getRcvEventId(hMcbsp0);
// Clear any pending receive/transmit interrupts
IRQ_clear(rcvEventId);
IRQ_disable(rcvEventId);
// Enable all maskable interrupts
IRQ_globalRestore(old_intm);
/* in the code automatically generated by the DSPBIOS/CCSL GUI config*/
MCBSP_start(hMcbsp0,
MCBSP_XMIT_START | MCBSP_RCV_START |
MCBSP_SRGR_START | MCBSP_SRGR_FRAMESYNC,
0x300u);
MCBSP_ASSERT_HANDLE(hMcbsp0,return 11);
return 1;
}
void flash_program(long code_len)
{
long program_cnt = 0,i = 0,j=2;
for(program_cnt=0;program_cnt<code_len*2+4;program_cnt+=4)
{
//写使能
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x06);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x00);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x00);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x00);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x00);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x00);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x00);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x00);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x02);
//写地址
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, program_cnt>>16);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, program_cnt>>8);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, program_cnt);
while (!MCBSP_xrdy(hMcbsp0));
//写第一个字(word)
a=*(int *)(0x800b+j);
MCBSP_write8(hMcbsp0, a>>8);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, a);
j++;
//写第二个字(word)
a=*(int *)(0x800b+j);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, a>>8);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, a);
j++;
for(i=0;i<20000;i++);
}
}
void flash_earse()
{
//写使能
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x06);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x00);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x00);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x00);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x00);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x00);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x00);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x00);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x62);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x00);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x00);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x00);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x00);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x00);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x00);
while (!MCBSP_xrdy(hMcbsp0));
MCBSP_write8(hMcbsp0, 0x00);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -