📄 20080130.txt
字号:
#include "config.h"
#include "stdlib.h"
#include "spi.h"
uint8 const ShowTable[11] = {
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x00};
#define HC595_CS 0x00000080 /* P0.8口为74HC595的片选 */
#define TaskStkLengh 64 //Define the Task stack length 定义用户任务的堆栈长度
#define TASK_START_PRIO 10 /* Application tasks priorities */
#define TASK_1_PRIO 2
#define TASK_2_PRIO 3
#define TASK_3_PRIO 4
OS_STK TaskStartStk[TaskStkLengh]; /* Startup task stack */
OS_STK Task1Stk[TaskStkLengh]; /* Task #1 task stack */
OS_STK Task2Stk[TaskStkLengh]; /* Task #2 task stack */
OS_STK Task3Stk[TaskStkLengh];
OS_EVENT *AckMbox; /* Message mailboxes for Tasks #1 and #2 */
OS_EVENT *TxMbox1;
OS_EVENT *TxMboxSPI;
OS_EVENT *AckMboxSPI;
OS_EVENT *MainSem; //用于整个程序的信号量
void TaskStart(void *pdata); //Function prototypes of tasks
void Task1(void *pdata); //Task1 任务1
void Task2(void *pdata); //Task2 任务2
void Task3(void *pdata);
const uint32 LED1 = (1 << 18); // P1.18控制LED1,高电平点亮
const uint32 LED2 = (1 << 17); // P1.17控制LED2,高电平点亮
INT8U txmsgSPI=0;
#if 0
void DelayNS (uint32 dly)
{
uint32 i;
for ( ; dly>0; dly--)
for (i=0; i<50000; i++);
}
#endif
int main (void)
{
PINSEL2 = PINSEL2 & (~0x08); // P1.18连接GPIO
IO1DIR = LED1|LED2; // 设置LED1LED2控制口为输出
IO1CLR = LED1|LED2; // 关LED1LED2
SPIInit(0x30);
OSInit ();
AckMbox = OSMboxCreate((void *)0); /* Create 2 message mailboxes */
AckMboxSPI = OSMboxCreate((void *)0);
TxMbox1 = OSMboxCreate((void *)0);
TxMboxSPI = OSMboxCreate((void *)0);
MainSem = OSSemCreate(1);
OSTaskCreate (Task1,(void *)0, &Task1Stk[TaskStkLengh - 1], TASK_1_PRIO);
OSTaskCreate (Task2,(void *)0, &Task2Stk[TaskStkLengh - 1], TASK_2_PRIO);
OSTaskCreate (Task3,(void *)0, &Task3Stk[TaskStkLengh - 1], TASK_3_PRIO);
OSStart ();
return 0;
}
/*********************************************************************************************************
** Task 任务
********************************************************************************************************/
#if 0
void TaskStart (void *pdata)
{
pdata = pdata;
TargetInit ();
OSStatInit();
AckMbox = OSMboxCreate((void *)0); /* Create 2 message mailboxes */
AckMboxSPI = OSMboxCreate((void *)0);
TxMbox1 = OSMboxCreate((void *)0);
TxMboxSPI = OSMboxCreate((void *)0);
MainSem = OSSemCreate(1);
OSTaskCreate (Task1,(void *)0, &Task1Stk[TaskStkLengh - 1], TASK_1_PRIO);//创建两个任务
OSTaskCreate (Task2,(void *)0, &Task2Stk[TaskStkLengh - 1], TASK_2_PRIO);
OSTaskCreate (Task3,(void *)0, &Task3Stk[TaskStkLengh - 1], TASK_3_PRIO);
}
#endif
void Task1 (void *pdata)
{
char *rxmsg;
INT8U err;
char txmsg=1;
pdata = pdata;
TargetInit ();
OSStatInit();
while (1)
{
IO1SET = LED1; // LED1点亮
OSTimeDlyHMSM(0, 0, 0, 100 );
IO1CLR = LED1; // LED1熄灭
OSTimeDlyHMSM(0, 0, 0, 100 );
IO1SET = LED1; // LED1点亮
OSTimeDlyHMSM(0, 0, 0, 100 );
IO1CLR = LED1; // LED1熄灭
OSTimeDlyHMSM(0, 0, 0, 100 );
OSMboxPost(TxMbox1, (void *)&txmsg); /* Send message to Task #2*/
rxmsg = (char *)OSMboxPend(AckMboxSPI, 0, &err); /* Wait for acknowledgement from Task #2 */
}
}
void Task2 (void *pdata)
{
char *rxmsg;
INT8U err;
pdata = pdata;
while (1)
{
OSSemPend(MainSem, 0, &err);
rxmsg = (char *)OSMboxPend(TxMbox1, 0, &err); /* Wait for message from Task #1 */
IO1SET=((*rxmsg)<<17); //控制P0.0~P0.7
txmsgSPI++;
//OSMboxPost(AckMbox, (void *)1);
OSMboxPost(TxMboxSPI, (void *)&txmsgSPI);
OSTimeDlyHMSM(0, 0, 0, 500); /* Wait 10 milsecond */
IO1CLR=LED2;
OSSemPost(MainSem);
}
}
void Task3 (void *pdata)
{
uint8 temp;
INT8U err;
char *rxmsgSPI;
pdata = pdata; /* 避免编译警告 */
//SPIInit(0x30); /* 目标板初始化 */
PINSEL0 = (PINSEL0 & 0xffff00ff) | 0x1500;
IO0DIR = HC595_CS;
while (1)
{
OSSemPend(MainSem, 0, &err);
OSMboxPost(AckMboxSPI, (void *)1);
rxmsgSPI = (char *)OSMboxPend(TxMboxSPI, 0, &err);
SPIStart();
IO0CLR = HC595_CS;
SPIRW(&temp, ~ShowTable[*rxmsgSPI]);
IO0SET = HC595_CS;
SPIEnd();
OSTimeDlyHMSM(0, 0, 0, 300 ); /* Wait 1 second */
OSSemPost(MainSem);
}
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -