?? codeboot.c
字號:
/*********************************************************************************
* MCPSB.C v1.00 測試MCBSP同步串口測試的主程序 *
* 版權(quán)(c) 2003- 北京合眾達(dá)電子技術(shù)有限責(zé)任公司 *
* 設(shè)計者: 段立鋒 *
**********************************************************************************/
#include "type.h"
#include "uart.h"
#include "sysreg.h"
#include "mcbsp54.h"
#include "memory.h"
#include "testmain.h"
#include "comm.h"
/*幀長度的設(shè)定*/
#define FRAMLONGTH 0x104
#define TESTCODEADDR 0x28100
#define DataLongth 0x100
typedef struct _UartForDec5416{
unsigned int Length;
unsigned int Type;
unsigned int Mutul;
unsigned int Data[DataLongth];
unsigned int Check;
}UartForDec5416, *PuartForDec5416;
/*系統(tǒng)狀態(tài)緩沖區(qū)*/
#pragma DATA_SECTION(time_state,".time_buffer")
unsigned int time_state[32];
HANDLE uart_a = 0;
HANDLE uart_b = 0;
unsigned int audiodata =0;
unsigned int i= 0;
unsigned int k= 0;
int uart_s=0,uart_err=0,fifostatus=0;
unsigned long testaddr = 0;
PuartForDec5416 psend=0;
PuartForDec5416 precieve =0;
unsigned int datasendlong = 0;
unsigned int errorsend = 0;
unsigned int uart[0x104] ={0};
unsigned int uarts[0x104] = {0};
main()
{
/*初始化DEC5416板卡*/
dec5416_init();
/*設(shè)置系統(tǒng)的時鐘*/
sys_clk(CLK160);
for(i= 0; i<0x104;i++)
{
uart[i] = 0x5555;
uarts[i] = 0x5555;
}
for(i = 0; i<32;i++)
{
time_state[i] = 0;
}
/*獲取有效的串口句柄*/
uart_a = uart_open(UART_A);
uart_b = uart_open(UART_B);
/*初始化串口A*/
uart_setup(uart_a, /*串口A*/
buad_19k2, /*串口的波特率設(shè)置*/
data_w8, /*數(shù)據(jù)長度為8*/
data_s1, /*數(shù)據(jù)停止位為1*/
//uart_parity, /*設(shè)置奇較驗位*/
0,
(fifo_enable+fifo_txdip16+fifo_rxdip16),/*FIFO設(shè)置*/
0); /*設(shè)置自閉環(huán)方式*/
/*串口A中斷設(shè)置*/
uart_interrupt_control( uart_a, uartint_rhr, uart_enable);
/*設(shè)置接收長度*/
uart_reclong_set(uart_a,FRAMLONGTH);
time_start();
/*打開系統(tǒng)的串口中斷*/
sysint_enable(0xa);
/*配置系統(tǒng)存儲器*/
memory_set(0x80);
/*實驗主控程序*/
psend = (PuartForDec5416)(&uarts[0]);
/*通知主機,系統(tǒng)準(zhǔn)備好*/
psend->Length = FRAMLONGTH;
psend->Type = UARTCOMMAND;
psend->Data[0] = INITOVER;
psend->Mutul = UARTCONT;
uart_send(uart_a,FRAMLONGTH, (unsigned int *)psend);
testaddr = TESTCODEADDR;
for(;;)
{
uart_recive(uart_a,&uart[0]);
/*判斷串口的狀態(tài)*/
uart_s =uart_status(uart_a);
if( uart_s == 2)
{
/*讀RHR清 RHR interrupt*/
uart_read_reg(uart_a,rhr);
/*復(fù)位FIFO指針*/
fifostatus = uart_read_reg(uart_a,fcr);
uart_write_reg(uart_a,fcr,fifo_rreset);
uart_write_reg(uart_a,fcr,fifostatus);
continue;
}
/*串口出錯*/
if(uart_s == ERROR)
{
/*讀狀態(tài)寄存器*/
uart_err = uart_read_reg(uart_a,lsr);
/*復(fù)位FIFO指針*/
fifostatus = uart_read_reg(uart_a,fcr);
uart_write_reg(uart_a,fcr,fifo_rreset);
uart_write_reg(uart_a,fcr,fifostatus);
continue;
}
/*數(shù)據(jù)較驗出錯*/
if(uart_s == 3)
{
/*復(fù)位FIFO指針*/
fifostatus = uart_read_reg(uart_a,fcr);
uart_write_reg(uart_a,fcr,fifo_rreset);
uart_write_reg(uart_a,fcr,fifostatus);
/*通知主機程序通訊出錯,準(zhǔn)備重發(fā)*/
psend->Length = FRAMLONGTH;
psend->Type = UARTCOMMAND;
psend->Data[0] = RECIEVEERROR;
psend->Mutul = UARTCONT;
uart_send(uart_a,FRAMLONGTH, (unsigned int *)psend);
continue;
}
/*數(shù)據(jù)準(zhǔn)備好*/
if(uart_s == 0)
{
precieve = (PuartForDec5416)(&uart[0]);
/*不是命令幀*/
if((precieve->Type != UARTCOMMAND)&&(precieve->Type != UARTDATA))
{
/*無效命令*/
psend->Length = 1;
psend->Type = UARTCOMMAND;
psend->Data[0] = COMMANDNODO;
psend->Mutul = UARTCONT;
uart_send(uart_a,FRAMLONGTH, (unsigned int *)psend);
precieve->Data[0] = 0;
precieve->Type = UARTCOMMAND;
continue;
}
}
/*接收從主機的數(shù)據(jù)*/
precieve = (PuartForDec5416)(&uart[0]);
/*是命令*/
if(precieve->Type == UARTCOMMAND)
{
if(precieve->Data[0] == SYSRESET)
{
/*系統(tǒng)復(fù)位*/
sys_set(0x4);
}
}
if(precieve->Type == UARTDATA)
{
precieve->Type = 0x5555;
/*將本交的接收數(shù)據(jù)寫入相應(yīng)的地址*/
progm_writem(testaddr,precieve->Data,DataLongth);
if(precieve->Mutul ==1)
{
/*設(shè)置下一次的地址*/
testaddr = testaddr + DataLongth;
/*通知主機進(jìn)行下一次的數(shù)據(jù)通訊*/
psend->Length = 0x1;
psend->Type = UARTCOMMAND;
psend->Mutul = UARTCONT;
psend->Data[0] = RECIEVEGOOD;
uart_send(uart_a,FRAMLONGTH, (unsigned int *)psend);
}
else
{
/*通知主機程序引導(dǎo)結(jié)束,準(zhǔn)備實驗*/
psend->Length = 0x4;
psend->Type = UARTCOMMAND;
psend->Data[0] = RECIEVEEND;
psend->Mutul = UARTCONT;
uart_send(uart_a,FRAMLONGTH, (unsigned int *)psend);
test_main();
}
}
led_on();
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -