?? examplec.c
字號:
/***************************************************************************/
/* */
/* test . C */
/* */
/* */
/* */
/***************************************************************************/
#include "54regs.h" //54寄存器定義
//#include "mcbsp54.h"
#include "defdef.h" //宏定義
#include "vardef.h" //變量
/***************************************************************************/
/* */
/* 定義函數 */
/* */
/* */
/* */
/***************************************************************************/
void ini_dsp(void);
unsigned int data_ram_check(void);
unsigned int pro_ram_check(void);
unsigned int flash_check(void);
unsigned int uart_check(void);
void LEDTest();
void delay(unsigned int period);
void ini_fifo();
void FlashErase();
void ByteWrite(int tadd,int page,int data);
void interrupt c_xint0(void);
volatile int* err_state = (volatile int*)0x4ff;
int c[16];
/***************************************************************************/
/* */
/* MAIN */
/* */
/* */
/* */
/***************************************************************************/
main()
{
int temp;
*err_state=0;
ini_dsp();
/*
while (1)
{
int c=0x20;
int j=0;
UART_LCR=c;
j=UART_LCR;
}
*/
/*
while (1)
{
ini_fifo();
UART_THR=0;
delay(20);
}
*/
LEDTest();
temp=3;
LED=temp;
delay(2000);
if (data_ram_check())
{
*err_state|=0x01;
}
if (pro_ram_check())
{
*err_state|=0x02;
}
if (uart_check())
{
*err_state|=0x04;
}
if (flash_check())
{
*err_state|=0x08;
}
FlashErase();
LED=0;
while(1)
{
*ST1^=0x2000;
delay(1000);
}
}
/****************************************************************************/
/* */
/* 初始化DSP */
/* */
/* */
/* */
/***************************************************************************/
void ini_dsp(void)
{
//初始化中斷
*PMST=0x0fc0;
* CLKMD =0x9007;
//設置 IO等待周期為7,RAM等待周期為1,ROM等待周期為1
* SWSR=0;
* SWWSR=SPEED;
/*啟動時鐘*/
// *TCR0=TCR0_data;
/*啟動中斷*/
// asm (" RSBX INTM ");
}
void ini_fifo()
{
UART_FCR=0x03;
UART_LCR=UART_LCR&0xff7f;
UART_IER=0x04;
UART_LSR=0x00;
UART_LCR=0x03;
UART_MCR=0x00;
UART_LCR=UART_LCR|0x0080;
UART_DLL=0x10;
UART_DLM=0x0;
UART_LCR=UART_LCR&0xff7f;
}
unsigned int uart_check(void)
{
int i;
// int err;
ini_fifo();
UART_THR=0;
delay(20);
UART_THR=1;
delay(20);
UART_THR=2;
delay(20);
UART_THR=3;
delay(20);
UART_THR=4;
delay(20);
UART_THR=5;
delay(20);
UART_THR=6;
delay(20);
UART_THR=7;
delay(20);
UART_THR=8;
delay(20);
UART_THR=9;
delay(20);
UART_THR=10;
delay(20);
UART_THR=11;
delay(20);
UART_THR=12;
delay(20);
UART_THR=13;
delay(20);
UART_THR=14;
delay(20);
UART_THR=15;
delay(20);
for (i=0;i<16;i++)
{
c[i]=UART_RBR&0x00ff;
if (i!=c[i])
return(1);
delay(20);
}
delay(10);
return(0);
}
unsigned int data_ram_check(void)
{
volatile int* data_ram_point = (volatile int*)0x500;
unsigned int j = 0;
for( j=0;j <0xfb00;j++)
{
*(data_ram_point+j) = 0x0000;
delay(1);
if (*(data_ram_point+j) != 0)
return(1);
*(data_ram_point+j) = 0x5555;
delay(1);
if (*(data_ram_point+j) != 0x5555)
return(1);
*(data_ram_point+j) = 0x0aaaa;
delay(1);
if ((*(data_ram_point+j)) != 0x0aaaa)
return(1);
*(data_ram_point+j) = 0x0ffff;
delay(1);
if ((*(data_ram_point+j)) != 0x0ffff)
return(1);
}
return(0);
}
unsigned int pro_ram_check(void)
{
unsigned int Datetmp;
int start;
int data;
int i=0;
for( start=0x1000;start <0xf000;start++)
{
Datetmp=0;
DtoP(start,&Datetmp,0);
PtoD(start,&data,0);
if (data != 0)
return(1);
i++;
Datetmp=0x5555;
DtoP(start,&Datetmp,0);
PtoD(start,&data,0);
if (data != 0x5555)
return(1);
Datetmp=0xaaaa;
DtoP(start,&Datetmp,0);
PtoD(start,&data,0);
if (data != 0x0aaaa)
return(1);
Datetmp=0xFFFF;
DtoP(start,&Datetmp,0);
PtoD(start,&data,0);
if (data!= 0x0ffff)
return(1);
}
return(0);
}
unsigned int flash_check(void)
{
int start;
int data;
FlashErase();
for( start=0x1000;start <0xf000;start++)
{
ByteWrite(start,2,0x5555);
delay(5);
PtoD(start,&data,2);
if (data != 0x5555)
return(1);
}
FlashErase();
for( start=0x1000;start <0xf000;start++)
{
ByteWrite(start,2,0xaaaa);
delay(5);
PtoD(start,&data,2);
if (data != 0xaaaa)
return(1);
}
return(0);
}
void FlashErase()
{
unsigned int Datetmp;
Datetmp=0xaaaa;
DtoP(0x5555,&Datetmp,4);
Datetmp=0x5555;
DtoP(0x2aaa,&Datetmp,4);
Datetmp=0x8080;
DtoP(0x5555,&Datetmp,4);
Datetmp=0xaaaa;
DtoP(0x5555,&Datetmp,4);
Datetmp=0x5555;
DtoP(0x2aaa,&Datetmp,4);
Datetmp=0x1010;
DtoP(0x5555,&Datetmp,4);
delay(500);
}
void ByteWrite(int tadd,int page,int data)
{
unsigned int Datetmp;
Datetmp=0xaaaa;
DtoP(0x5555,&Datetmp,page);
Datetmp=0x5555;
DtoP(0x2aaa,&Datetmp,page);
Datetmp=0xa0a0;
DtoP(0x5555,&Datetmp,page);
Datetmp=data;
DtoP(tadd,&Datetmp,page);
}
void LEDTest(void)
{
int count=5;
while(count)
{
*ST1^=0x2000;
delay(500);
LED=0;
delay(500);
LED=1;
delay(500);
LED=2;
delay(500);
LED=3;
delay(500);
count--;
}
}
void delay(unsigned int period)
{
int periodi, periodj;
for(periodi=0; periodi<period; periodi++)
{
for(periodj=0; periodj<period>>1; periodj++);
}
}
void interrupt c_xint0(void)
{
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -