📄 rtx51_test.c
字号:
//********************************************************************************
//for board function test
//include led,uart,i2c,mdio
//2008.3.19 by weijian DL
//********************************************************************************
//********************************************************************************
//including
//********************************************************************************
#include "SYSDEF.H" /* system i/o interface defines */
#include "I2C.H" /* i2c function & defines */
//#include "IIC.H" /* i2c function & defines */
#include "UART.H" /* uart function & defines */
#include "MDIO.H" /* mdio function & defines */
#include <rtx51tny.h> /* RTX-51 tiny functions & defines */
//********************************************************************************
//task number defines
//********************************************************************************
#define INIT 0 /* task number of task: init */
#define I2C_TEST 1 /* task number of task: i2c_test */
#define LED_BLINK 2 /* task number of task: led */
#define UART 3 /* task number of task: uart */
#define MDIO 4 /* task number of task: MDIO */
#define TASK_MANAGE 5 /* task number of task: TASK_MANAGE */
//********************************************************************************
//serial interupt rutine
//********************************************************************************
void serial ( void ) interrupt 4 using 2
{
if(RI)
{
RI=0;
if(a.rcount<max)//缓冲区满后字节被丢弃
{
a.rcount++;
a.rcombuffer[a.rend]=SBUF;//不满则读入
a.rend++;
if(a.rend>=max)//循环利用缓冲区
a.rend=0;
}
}
else if(TI)
{
TI=0;
if(a.tcount>0)//如有数据则发送,并设置相关标志字
{
SBUF=a.tcombuffer[a.tstart];
a.tstart++;
if( a.tstart>=max)
a.tstart=0;
a.tcount--;
}
else
a.issent=0;//否则设置停止发送字
}
}
//********************************************************************************
//init task for timer,uart,i2c,interupt,etc init
//********************************************************************************
void init ( void ) _task_ INIT /* program execution starts here */
{
CPU_Init();
// TH0=0xF8;
// TL0=0x30; //24MHZ晶振,计时0.5ms
// os_create_task ( I2C_TEST ); /* I2C TEST task *///
// os_create_task ( LED_BLINK ); /* led blinking task */
// os_create_task ( TASK_MANAGE); /* TASK_MANAGE task */
// os_create_task ( MDIO); /* MDIO task */
os_create_task ( UART ); /* UART TEST task */
os_delete_task ( INIT ); /* stop init task ( no longer needed ) */
while(1);
}
//********************************************************************************
//task fot i2c read/write
//********************************************************************************
void i2c_task ( void ) _task_ I2C_TEST
{
unsigned char vendor=0xFF;
// unsigned int _vendor=0xFFFF;
I2C_Init();
while(vendor!=0x1191)
{
vendor=Read_I2C_1Byte ( Slave_I2c_Adr, 0x2 );
// _vendor=IICRECEIVEWORD( 0 );
delay_ms(1);
MCU_GLINT_CT=2;
}
MCU_GLINT_CT=20;
while(1);
}
//********************************************************************************
//task fot led,to show system running status
//********************************************************************************
void led_task ( void ) _task_ LED_BLINK /* start led blinking task */
{
cnt_mcu=MCU_GLINT_CT;
cnt_mdio=MDIO_GLINT_CT;
while(1)
{
// os_wait ( K_SIG, 0, 0 );
os_wait ( K_TMO, 5, 0 );
if(nBUZZ_ALM==Alarm_On) nSYS_ALM=Led_On;
else nSYS_ALM=Led_Off;
if (cnt_mcu==1)
{
nMCU_OK= !nMCU_OK;
cnt_mcu=MCU_GLINT_CT;
}
else if (cnt_mcu==0)
cnt_mcu=MCU_GLINT_CT;
else cnt_mcu--;
if (cnt_mdio==1)
{
nXRS_OK= !nXRS_OK;
cnt_mdio=MDIO_GLINT_CT;
}
else if (cnt_mdio==0)
cnt_mdio=MDIO_GLINT_CT;
else cnt_mdio--;
}
}
//********************************************************************************
//task fot uart
//********************************************************************************
void uart_task ( void ) _task_ UART /* program execution starts here */
{
char f,k=0;
inibuffer();
comini();
while(sent("board test.\r\n",13)!=13);
sentoff();
while(1)
{
while(sent("1.cpu test.\r\n",13)!=13);
sentoff();
while(sent("2.alarm test.\r\n",15)!=15);
sentoff();
while(sent("3.uart test.\r\n",14)!=14);
sentoff();
while(sent("4.i2c test.\r\n",13)!=13);
sentoff();
while(sent("5.mido test.\r\n",14)!=14);
sentoff();
while(sent("6.led test.\r\n",13)!=13);
sentoff();
while(sent("enter your choice:\r\n",18)!=18);
sentoff();
while((f=getchar())==0);//输入字符不回显,不要输入回车
while(sent(&f,1)!=1);
sentoff();
while(sent("\r\n",2)!=2);
sentoff();
switch(f)
{
case '1':
while(sent("cpu ok\r\n",8)!=8);
sentoff();
MCU_GLINT_CT=10;
break;
case '2':
while(sent("set alarm?y or n\r\n",18)!=18);
sentoff();
while((f=getchar())==0);
if (f=='y')
{ nBUZZ_ALM=Alarm_On;
while(sent("alarm on\r\n",10)!=10);
sentoff();
}
else
{
nBUZZ_ALM=Alarm_Off;
while(sent("alarm off\r\n",11)!=11);
sentoff();
}
break;
case '3':
while(sent("uart ok\r\n",9)!=9);
sentoff();
break;
case '4':
while(sent("i2c enable?y or n\r\n",19)!=19);
sentoff();
while((f=getchar())==0);
if (f=='y')
{
os_create_task ( I2C_TEST ); /* I2C TEST task*/
while(sent("i2c enable\r\n",12)!=12);
sentoff();
}
else if (f=='n')
{
os_delete_task ( I2C_TEST ); /* I2C TEST task*/
I2C_Init();
while(sent("i2c unable\r\n",12)!=12);
sentoff();
}
break;
case '5':
while(sent("mdio enable?y or n\r\n",20)!=20);
sentoff();
while((f=getchar())==0);
if (f=='y')
{
os_create_task ( MDIO ); /* mdio task*/
while(sent("mdio enable\r\n",13)!=13);
sentoff();
MDIO_GLINT_CT=10;
}
else if (f=='n')
{
os_delete_task ( MDIO ); /* mdio task*/
XRS_MDIO_Init();
MDIO_GLINT_CT=0;
cnt_mdio=0;
nXRS_OK=Led_Off;
while(sent("mdio unable\r\n",13)!=13);
sentoff();
}
break;
case '6':
while(sent("enable led?y or n\r\n",19)!=19);
sentoff();
while(sent("z for alram off\r\n",17)!=17);
sentoff();
while((f=getchar())==0);
if (f=='y')
{
os_create_task ( LED_BLINK );
while(sent("led enable\r\n",12)!=12);
sentoff();
}
else if (f=='n')
{
while(sent("led unable\r\n",12)!=12);
sentoff();
os_delete_task (LED_BLINK);
nSYS_ALM=Led_Off;
nXRS_OK=Led_Off;
nMCU_OK=Led_Off;
}
else if (f=='z')
{
nBUZZ_ALM=Alarm_Off;
while(sent("alarm off\r\n",11)!=11);
sentoff();
}
break;
default:
break;
}
}
}
//********************************************************************************
//task fot mdio interface
//********************************************************************************
void mido_task ( void ) _task_ MDIO /* start mdio task */
{
unsigned char t;
XRS_MDIO_Init();
while(1)
{
t=XRS_MDIO_IF(0, 1,0x8,0,1, 0x59);
//读入0001地址处的16位数据
delay_ms(1);
}
}
//********************************************************************************
//manage tasks
//********************************************************************************
void manage_task ( void ) _task_ TASK_MANAGE /* start led blinking task */
{
while(1)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -