📄 main.c
字号:
// ARM Linker 选项:
// -info totals -ro-base 0x0C084000 -first Init.o(Init)
//
#include "defs.h"
#include "44b0x.h"
#include <avt.h>
#include <avtintl.h>
#include <string.h>
//void LcdMain(void *args);
//void GreenMain(void *args);
// 清看门狗
void
clrwtd(void) {
rPDATE ^= 1 << 3;//异或
// rPDATC ^= 1 << 2; //电机离合器闭合
}
// 串口命令接收任务
void GetPkt(void *args)
{
// 数据报格式
// |-------------------
// |H|F| len | data |C|
// |-------------------
// H: 帧头('H')
// F: 功能码(0x66为对钟)
// len: 数据长度
// data: 报文数据字段
// C: 累加和校验
while(1)
{
if(getkey() == 'H')
{
if(getkey() == 0x66)
{
bsp_puts("收到对钟命令!\n");
}
}
tm_delay(50);
}
}
/****************************************************************************
【功能说明】ADC某一通道进行转换,返回转换的数据
****************************************************************************/
unsigned short Read_Adc(unsigned char ch)
{
int i;
static int prevCh=-1;
if(prevCh!=ch)
{
rADCCON = 0x1|(ch<<2); //设置AD转换通道
for(i=0;i<150;i++); //最小15uS
}
rADCCON=0x1|(ch<<2); //开始AD转换
while(rADCCON & 0x1); //避免标志FLAG错误
while(!(rADCCON & 0x40)); //等待AD转换结束
for(i = 0; i < rADCPSR; i++); //避免第二次标志FLAG错误
prevCh=ch;
return rADCDAT; //返回AD转换值
}
//***************************************************************************
void LeftDone(int vol)
{
rPDATC |= 1; //MC33883 GN控制置高,关闭输出
rTCON &= ~(1 << 20); //关PWM4
rTCNTB4=2000;
rTCMPB4=vol;
rTCON|= 1 << 23;
rTCON &= ~(1 << 22);
rTCON|= 1 << 21; /*手工装载定时器的计数值*/
rTCON &= ~(1 << 21);
rTCON|= 1 << 20; //开PWM4
rTCON &= ~(1 << 21);
rPDATC &= ~1; //MC33883 GN控制低,打开输出
rPDATC |= 1 << 2; //电机离合器闭合
}
void RightDone(int vol)
{
rPDATC |= 1; //MC33883 GN控制置高,关闭输出
rTCON &= ~(1 << 8); //关PWM1
rTCNTB1=2000;
rTCMPB1=vol; //设置占空比
rTCON|= 1 << 11;
rTCON &= ~(1 << 10);
rTCON|= 1 << 9; /*手工装载定时器的计数值*/
rTCON &= ~(1 << 9);
rTCON|= 1 << 8; //开PWM1
rTCON &= ~(1 << 9);
rPDATC &= ~1; //MC33883 GN控制低,打开输出
rPDATC |= 1 << 2; //电机离合器闭合
}
void PwmWork(void *args)
{
int a0=0;
while(1)
{
bsp_puts("PWM正在工作!\n");
a0 = Read_Adc(2);
a0=a0+1;
tm_delay(200);
}
}
// 根任务
void root(void)
{
UINT tid;
// 先清一次看门狗
clrwtd();
LeftDone(3000);
tm_delay(10);
RightDone(3000);
tm_delay(10);
// 创建串口命令接收任务
(void)t_create("DZ", 3, GetPkt, 0, 0, 1, &tid);
// 创建PWM任务
(void)t_create("PWM", 4, PwmWork, 0, 0, 1, &tid);
// 根任务现在变成看门狗任务,1秒清一次看门狗
while(1)
{
clrwtd();
bsp_puts("root任务正在执行...\n");
LeftDone(1900);
tm_delay(500);
LeftDone(1000);
tm_delay(500);
LeftDone(3000);
tm_delay(70);
RightDone(1900);
tm_delay(500);
RightDone(1000);
tm_delay(500);
RightDone(3000);
tm_delay(70);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -