📄 test.c
字号:
/**************************************************************************************************
*
* 作者: 胡翌博,浙江大学信电系电路与系统2001研
*
* 文件名:test.c
*
* 版本: 5.41
*
* 功能描述:该C语言模块提供了底层硬件的测试功能
*
* 被本文件引用的文件列表:typDef.h, funcDeclare.h, <string.h>
*
* 引用本文件的文件列表:no
*
* 版本更迭:
* 日期 版本号 作者 备注
* 07-15-2003 1.0 胡翌博 --实验成功
* 07-20-2003 2.0 胡翌博 --修改了文本用户界面
* 07-27-2003 3.0 胡翌博 --进一步修改了文本用户界面
* 08-06-2003 4.0 胡翌博 --增加了模块说明文件名由boot.c更名为test.c
* 08-15-2003 5.0 胡翌博 --从SDT移植到ADS
* --将C入口由C_Entry()改为main()
* --去除了未使用的C库头文件stdio.h
* 08-26-2003 5.1 胡翌博 --从SDT移植到ADS
* --将C入口由C_Entry()改为main()
* --去除了未使用的C库头文件stdio.h
* --head.h更名为funcDeclare.h,修改相应的include语句
* --int boot(void)函数更名为int test(void)
* 08-28-2003 5.2 胡翌博 --将C程序入口由int C_Entry(void)改为int main(void)
* --改版本未取得成功
* 08-28-2003 5.3 胡翌博 --仍然采用C_Entry作为C程序入口
* 08-29-2003 5.4 胡翌博 --增加了软复位测试
* 08-30-2003 5.41 胡翌博 --用户菜单由原来的单位十进制数改为采用双位十进制数,
* 这样潜在的可选项从0~9扩展到00~99
* --改进了显示方式,用户每个输入都增加了回显
*
**************************************************************************************************/
#include "typDef.h"
#include "funcDeclare.h"
#include <string.h>
extern int test(void);
int C_Entry(void)
{
test();
while(1);
}
/**************************************************************************************************
函数名称: test()
函数功能: 这是一个test程序,用于测试外设端口是否可以正常工作
测试LED;
测试串口;
测试ROM
测试软件复位
入口参数: number 指定位置的led.(0-7)
返 回 值: 无.
备 注:
**************************************************************************************************/
int test(void)
{
UINT16 i; //UINT16 means unsigned short(16 bits)
char *pBuff = NULL; //送给串口的字符串指针
char datBuf[1024]; //接收大片数据的缓存,用于缓存从串口或其他存储块接收到的大片数据
char whS[4]; //用户选择测试项缓存,字符形式
UINT16 *pFlash;
UINT16 *pTmp;
int secNum; //段号,数值形式
int testNum; //测试选项号,数值形式
//测试LED
ledAllOn(); //点亮GPIO上所有的led.
delayMs(300);
ledAllOff(); //熄灭GPIO上所有的led.
ledRun(1); //循环点亮1次led.
ledAllOff(); //熄灭GPIO上所有的led.
//测试串口
if(uartDevInit(0) == ERROR)
{
ledAllOn();
return ERROR;
}
pBuff = "\r\n\r\n\r\nLED 正常!\r\n";
armUartWrite(0, pBuff, strlen(pBuff)); //从串口0打印信息.
pBuff = "UART0 正常!\r\n";
armUartWrite(0, pBuff, strlen(pBuff)); //从串口0打印信息.
ledShine(0); //LED0亮表明UART0自检通过
/*
if(uartDevInit(1) == ERROR)
{
ledAllOn();
return ERROR;
}
pBuff = "UART1 正常!\r\n";
armUartWrite(0, pBuff, strlen(pBuff)); //从串口1打印信息.
ledShine(0); //LED1亮表明UART1自检通过
*/
//测试服务菜单
while(1)
{ //请求用户选择测试项
pBuff="\r\n请选择您要测试的项目:\r\n";
armUartWrite(0, pBuff, strlen(pBuff));
pBuff="00:退出初始化测试引导程序\r\n";
armUartWrite(0, pBuff, strlen(pBuff));
pBuff="01:片擦除Flash\r\n";
armUartWrite(0, pBuff, strlen(pBuff));
pBuff="02:段擦除Flash\r\n";
armUartWrite(0, pBuff, strlen(pBuff));
pBuff="03:编程Flash\r\n";
armUartWrite(0, pBuff, strlen(pBuff));
pBuff="04:软复位\r\n";
armUartWrite(0, pBuff, strlen(pBuff));
armUartRead(0,whS, 1); //读入十位数字
armUartWrite(0, whS, 1); //回显十位数字
testNum=(whS[0]-'0')*10; //计算十位数字的数值
armUartRead(0,whS, 1); //读入个位数字
whS[1]='\r';
whS[2]='\n';
armUartWrite(0, whS, 3); //回显个位数字,然后回车换行
testNum=testNum+(whS[0]-'0'); //计算个位数字的数值,并与十位数字的数值相加,得到测试选项的数值
switch(testNum)
{
case 0: //退出boot
pBuff="\r\n有空一定要来喝茶呀!\r\n";
armUartWrite(0, pBuff,strlen(pBuff));
ledAllOff(); //退出boot之前,LED全部熄灭
return OK;
case 1: //片擦除Flash
pBuff="\r\n正在片擦除,这可能需要较长时间...\r\n";
armUartWrite(0, pBuff, strlen(pBuff));
if(amChipErase() != OK) //擦除整片flash.
{
pBuff="片擦除失败!\r\n别伤心,这也是常有的事:)\r\n";
armUartWrite(0, pBuff, strlen(pBuff));
break;
}
ledShine(1); //LED1亮,片擦除Flash成功
pBuff="片擦除成功!\r\n";
armUartWrite(0, pBuff, strlen(pBuff)); //从串口0打印信息.
break;
case 2://段擦除Flash
pBuff="\r\n请选择要擦除的段
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -