📄 test.c
字号:
#include <GGT_OS.h>
#include "Source\OS_CPU\lpc210X.h"
#define NOP() __asm{NOP}
UINT8 C;
UINT8 Buf[100];
INT32 Len = 0;
void IntUart0(void) __irq
{
NOP();NOP();
switch (U0IIR & 0x0e)
{
case 0x02:
break;
case 0x04:
while((U0LSR & 0x01) == 1)
C = U0RBR;
IOPIN ^= (1 << 27);
break;
case 0x0C:
while((U0LSR & 0x01) == 1)
{
C = U0RBR;
Buf[Len++] = C;
}
IOPIN ^= (1 << 27);
//while(1);
break;
default: break;
}
VICVectAddr = 0;
NOP();NOP();
//VICVectAddr = 0;
}
#define PLL_SCALE 5
#define Fosc 11059200
#define Fcclk (Fosc * PLL_SCALE)
#define Fcco (Fcclk * 4)
#define Fpclk (Fcclk / 1) * 1
#define Fwdt (Fpclk / 1)
#define Fadclk 1000000
#define IRQ_ENABLE (1<<5)
#define WDT_INT_VECT 0 // 分配IRQ通道
#define SOFT_INT_VECT 1 // 分配IRQ通道
#define TIME0_INT_VECT 4 // 分配IRQ通道
#define TIME1_INT_VECT 5 // 分配IRQ通道
#define UART0_INT_VECT 6 // 分配IRQ通道 1
#define UART1_INT_VECT 7 // 分配IRQ通道 2
#define PWM0_INT_VECT 8 // 分配IRQ通道
#define IIC_INT_VECT 9 // 分配IRQ通道 6
#define SPI0_INT_VECT 10 // 分配IRQ通道
#define SPI1_INT_VECT 11 // 分配IRQ通道
#define PLL_INT_VECT 12 // 分配IRQ通道
#define RTC_INT_VECT 13 // 分配IRQ通道 3
#define EINT0_INT_VECT 14 // 分配IRQ通道 4
#define EINT1_INT_VECT 15 // 分配IRQ通道
#define EINT2_INT_VECT 16 // 分配IRQ通道 5
#define EINT3_INT_VECT 17 // 分配IRQ通道
#define ADC0_INT_VECT 18 // 分配IRQ通道
//#define IIC1_INT_VECT 19 // 分配IRQ通道
//#define BOD_INT_VECT 20 // 分配IRQ通道
//#define ADC1_INT_VECT 21 // 分配IRQ通道
///////////// EXTMODE
#define EXTMODE0 0 //
#define EXTMODE1 1 //
#define EXTMODE2 2 //
#define EXTMODE3 3 //
///////////// EXTPOLAR
#define EXTPOLAR0 0 //
#define EXTPOLAR1 1 //
#define EXTPOLAR2 2 //
#define EXTPOLAR3 3 //
///////////// EXTINT
#define EINT0 0
#define EINT1 1
#define EINT2 2
#define EINT3 3
#define CHK_UART0 16 // P0.16
#define CTL_UART0 17 // P0.17 =0:CPU对外,=1:
#define Uart0_OFF (IOSET|=(1<<CTL_UART0)) //关闭CPU的uart0(接电脑或其他)
#define Uart0_ON (IOCLR|=(1<<CTL_UART0)) //打开CPU的uart0(接电脑或其他)
void InitUart0(void)
{
unsigned short Fdiv;
PINSEL0 |= 0x00000005;
U0LCR = 0x83;
Fdiv = (Fpclk / 16) / (9600);
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x03;
U0IER = 0x03;
U0FCR = 0xC7;
VICVectAddr2 = (unsigned long)IntUart0;
VICVectCntl2 = (IRQ_ENABLE | UART0_INT_VECT);
VICIntEnable |= (1 << UART0_INT_VECT);
IODIR |= (1<<17); //P0.17为输出
Uart0_ON;
}
#define Nop() __asm{NOP}
void SetWDT(void)
{
IOPIN ^= (1 << 28);
IOCLR = (1<<19);
Nop(); Nop();Nop(); Nop();Nop(); Nop();Nop(); Nop();
IOSET = (1<<19);
Nop(); Nop();Nop(); Nop();Nop(); Nop();Nop(); Nop();
}
INT32 IsBusy = 0;
void Dec(INT32 * Data, INT32 DecV)
{
(*Data) -= DecV;
}
void AddDec(UINT8 Flag, INT32 * Data, INT32 AddV, INT32 DecV)
{
(*Data) += AddV;
Dec(Data, DecV);
IsBusy = 1;
U0THR = Flag;
U0THR = *(((UINT8 *)Data) + 0);
U0THR = *(((UINT8 *)Data) + 1);
U0THR = *(((UINT8 *)Data) + 2);
U0THR = *(((UINT8 *)Data) + 3);
U0THR = ' ';
U0THR = ' ';
U0THR = ' ';
IsBusy = 0;
}
void Send(UINT8 Flag, INT32 *Data)
{
AddDec(Flag, Data, 2, 1);
}
UINT32 TaskID1 = 0;
_Mut Mut;
void TaskMain1(UINT32 Param) __task
{
_Msg Msg;
UINT32 ID;
OSTimerSet(OSTaskSelf(), 1000);
ID = OSTimerSet(OSTaskSelf(), 5000);
OSTimerSet(OSTaskSelf(), 10000);
OSTimerKill(ID);
while(Param == 156)
{
SetWDT();
OSTaskDelay(100);
if(OSTaskMsgPeek(&Msg))
{
if(Msg.Msg == 1000)
U0THR = Msg.wParam;
if(Msg.Msg == OS_MSG_TIMER)
U0THR = 'T';
}
}
}
void TaskMain2(UINT32 Param) __task
{
while(Param == 158)
{
IOPIN ^= (1 << 27);
OSMutWait(&Mut);
OSTaskMsgPost(TaskID1, 1000, '2', 0);
OSMutRelease(&Mut);
}
}
void TaskMain3(UINT32 Param) __task
{
while(Param == 158)
{
OSMutWait(&Mut);
OSTaskDelay(4000);
OSMutRelease(&Mut);
}
}
void TaskMain4(UINT32 Param) __task
{
while(Param == 158)
{
IOPIN ^= (1 << 29);
OSMutWait(&Mut);
OSTaskMsgPost(TaskID1, 1000, '4', 0);
OSMutRelease(&Mut);
}
}
void TaskUasrMain(void) __task
{
IODIR |= ((1 << 27) | (1 << 28) | (1 << 29) | (1 << 19));
IOCLR = ((1 << 27) | (1 << 28) | (1 << 29) | (1 << 19));
InitUart0();
U0THR = 'R';
OSMutInit(&Mut);
TaskID1 = OSTaskCreate(TaskMain1, 255, 156);
OSTaskCreate(TaskMain2, 254, 158);
OSTaskCreate(TaskMain3, 255, 158);
OSTaskCreate(TaskMain4, 255, 158);
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -