|
有哪位高手可以帮忙看看这一段程序,就是蜂鸣器这个任务一直调用不到,LED和数码管在板子上都可以正常运行,在2131上运行的,原来是要蜂鸣器,同时与leD流水灯、数码管3个任务同步进行的,现在只是实现了2个任务,蜂鸣器上板子一直没反应。
//在config.h文件中加入包含SPI.H,并定义HC595_CS、SPI_MOD;
** 在IRQ.S、TARGET.C文件中设置SPI向量中断//
#include "config.h"
#define BEEP 1 << 7
#define LEDS8 (0xFF << 18);
#define TASK_STK_SIZE 64
OS_STK TaskStartStk[TASK_STK_SIZE];
OS_STK TaskBeepStk [TASK_STK_SIZE];
OS_STK TaskledStk [TASK_STK_SIZE];
OS_STK TaskspiStk [TASK_STK_SIZE];
//OS_STK TaskKey1Stk [TASK_STK_SIZE];
void TaskStart(void *data);
void TaskBeep(void *data);
void Taskled(void *data);
void Taskspi(void *data);
//void TaskKey1(void *data);
const uint32 LED_TBL[] = {
0x00, 0xFF, // 全部熄灭后,再全部点亮
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, // 依次逐个点亮
0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, // 依次逐个叠加
0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, // 依次逐个递减
0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, // 两个靠拢后分开
0x81, 0xC3, 0xE7, 0xFF, 0xFF, 0xE7, 0xC3, 0x81 // 从两边叠加后递减
};
void DelayNS (uint32 dly)
{
uint32 i;
for ( ; dly>0; dly--)
for (i=0; i<50000; i++);
}
int main (void)
{
OSInit();
OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);
OSStart();
return 0;
}
uint8 const ShowTable[11] = {
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x00};
// 0 1 2 3 4 5 6 7 8 9
void TaskStart(void *pdata)
{
pdata = pdata;
TargetInit ();
OSTaskCreate(TaskBeep, (void *)0, &TaskBeepStk[TASK_STK_SIZE - 1], 1); // 创建任务TaskBeep,优先级为3
OSTaskCreate(Taskled, (void *)0, &TaskledStk[TASK_STK_SIZE - 1], 4);
OSTaskCreate(Taskspi, (void *)0, &TaskspiStk[TASK_STK_SIZE - 1], 3);
while (1)
{
OSTimeDly(10);
}
}
void Taskspi(void *pdata)
{
uint8 temp,i;
pdata = pdata; /* 避免编译警告 */
TargetInit(); /* 目标板初始化 */
PINSEL1 = (PINSEL1 & 0xf3ffffff);
IO0DIR = HC595_CS;
for (;;)
{
for (i = 0; i < 10; i++)
{
SPIStart();
IO0CLR = HC595_CS;
SPIRW(&temp, ~ShowTable);
IO0SET = HC595_CS;
SPIEnd();
OSTimeDly(OS_TICKS_PER_SEC / 5);
}
}
}
void TaskBeep (void *pdata)
{
pdata = pdata;
TargetInit();
//PINSEL0 = 0x00000000; // 设置管脚连接GPIO
PINSEL0 = (PINSEL0 & 0xffff3fff); // P0.16连接GPIO
PINSEL1 = (PINSEL1 & 0xfffffffc);
// IO0DIR &= ~KEY1; // 设置KEY1为输入
IO0SET = BEEP;
IO0DIR |= BEEP;
IO0DIR = BEEP; // 设置蜂鸣器为输出
for (;;)
{
//OSTaskSuspend(OS_PRIO_SELF);
IO0CLR = BEEP;
OSTimeDly(OS_TICKS_PER_SEC / 8);
IO0SET = BEEP;
OSTimeDly(OS_TICKS_PER_SEC / 4);
IO0CLR = BEEP;
OSTimeDly(OS_TICKS_PER_SEC / 8);
IO0SET = BEEP;
OSTimeDly(OS_TICKS_PER_SEC / 4);
//IO0SET = BEEP; // BEEP停止蜂鸣
//DelayNS(50);
//IO0CLR = BEEP; // BEEP 蜂鸣
//DelayNS(50);
}
}
void Taskled (void *pdata)
{
//INT8U err;
//INT16U *pd;
int i;
pdata=pdata;
TargetInit();
PINSEL2 = PINSEL2 & (~0x08);// P1[25:16]连接GPIO
IO1DIR = LEDS8; // 设置LED1控制口为输出
for (;;)
{
//int i;
for (i=0; i<42; i++)
{ /* 流水灯花样显示 */
IO1SET = ~((LED_TBL) << 18);
DelayNS(20);
IO1CLR = ((LED_TBL) << 18);
DelayNS(20);
}
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|