📄 msgmanager.c
字号:
void initMessageManager(void)
{
MessageManager = OSQCreate(MessageQueue, 0x0002);
return;
}
/*
*****************************************************************************************************************
* 函数名称: INT8U sendMessage(INT16U message);
* 功能描述: 向消息管理者MessageManager发送一则消息message;
* 参数: message用户定义的消息(MSG_XXXX);
* 返回值: INT8U型的变量,指示消息发送的状态;
*****************************************************************************************************************
*/
INT8U sendMessage(INT16U message)
{
INT8U result;
result = OSQPost(MessageManager,(void*)(&message));
return result;
}
/*
*****************************************************************************************************************
* 函数名称: INT16U getMessage(INT8U *err);
* 功能描述: 从消息管理者MessageManager提取一则消息;
* 参数: err指向INT8U的指针,指使提取消息的状态;
* 返回值: INT16U型的变量,代表用户定义的消息;
*****************************************************************************************************************
*/
INT16U getMessage(INT8U *err)
{
INT16U result;
result = *(INT16U *)OSQPend(MessageManager,0,err);
return result;
}
void initEncoderResource(void)
{
// disable channel 5 and 6 interrupt;
*TPU_CIER &= ~(CIER_CH5|CIER_CH6|CIER_CH7);
// select DIO function by programming the function select register of channel 5 and 6;
*TPU_CFSR2 = ((*TPU_CFSR2)&(~(CFSR2_CH5|CFSR2_CH6|CFSR2_CH7)))|0x8880;
// configure channel control register,clearing pin_level register;
*TPU_PRAM5 = 0x0007;
*(TPU_PRAM5 + 1) = 0x0000;
*TPU_PRAM6 = 0x0007;
*(TPU_PRAM6 + 1) = 0x0000;
*TPU_PRAM7 = 0x0007;
*(TPU_PRAM7 + 1) = 0x0000;
// enable channel 5 and 6 by setting high priority;
*TPU_CPR1 = ((*TPU_CPR1)&(~(CPR1_CH5|CPR1_CH6|CPR1_CH7)))|0xFC00;
// configure host sequece register, transition mode, record pin on transition;
*TPU_HSQR1 &= ~(HSQR1_CH5|HSQR1_CH6|HSQR1_CH7);
// initialize channel 5 and 6;
*TPU_HSRR1 = ((*TPU_HSRR1)&(~(HSRR1_CH5|HSRR1_CH6|HSRR1_CH7)))|0xFC00;
// wait for the operation completed;
while(((*TPU_HSRR1) & 0xFC00) != 0x0000);
// clear interrupt status(flag);
*TPU_CISR &= ~(CISR_CH5|CISR_CH6|CISR_CH7);
// enable channel 5 and 6 interrupt;
*TPU_CIER |= CIER_CH5|CIER_CH6|CIER_CH7;
return;
}
#pragma interrupt()
void rightProcess(void) // TPUCH5; a
{
INT16U loop;
asm(" MOVE SR,-(A7)\n ORI #$0700,SR\n");
*TPU_CISR &= ~CISR_CH5;
*TPU_PRAM5 = 0x0003;
*TPU_HSQR1 |= 0x0800;
*TPU_HSRR1 |= 0x0C00;
while(((*TPU_HSRR1)&0x0C00) != 0x0000);
*TPU_CISR &= ~CISR_CH5;
for(loop = 0; loop < 4000; loop++)
{
asm(" NOP");
}
*TPU_HSRR1 |= 0x0C00;
while((*TPU_HSRR1)&0x0C00 != 0x0000);
*TPU_CISR &= ~CISR_CH5;
if(((*(TPU_PRAM5 + 1))&0x8000) == 0x8000)
{
sendMessage(MSG_RIGHT);
}
*TPU_PRAM5 = 0x0007;
*TPU_HSQR1 &= ~HSQR1_CH5;
*TPU_HSRR1 |= 0x0C00;
while(((*TPU_HSRR1)&0x0C00) != 0x0000);
*TPU_CISR &= ~CISR_CH5;
asm(" MOVE (A7)+,SR\n");
}
#pragma interrupt()
void leftProcess(void) // TPUCH6; a
{
INT16U loop;
asm(" MOVE SR,-(A7)\n ORI #$0700,SR\n");
*TPU_CISR &= ~CISR_CH6;
*TPU_PRAM6 = 0x0003;
*TPU_HSQR1 |= 0x2000;
*TPU_HSRR1 |= 0x3000;
while(((*TPU_HSRR1)&0x3000) != 0x0000);
*TPU_CISR &= ~CISR_CH6;
for(loop = 0; loop < 4000; loop++)
{
asm(" NOP");
}
*TPU_HSRR1 |= 0x3000;
while((*TPU_HSRR1)&0x3000 != 0x0000);
*TPU_CISR &= ~CISR_CH6;
if(((*(TPU_PRAM6 + 1))&0x8000) == 0x8000)
{
sendMessage(MSG_LEFT);
}
*TPU_PRAM6 = 0x0007;
*TPU_HSQR1 &= ~HSQR1_CH6;
*TPU_HSRR1 |= 0x3000;
while(((*TPU_HSRR1)&0x3000) != 0x0000);
*TPU_CISR &= ~CISR_CH6;
asm(" MOVE (A7)+,SR\n");
}
#pragma interrupt()
void enterProcess(void) // TPUCH7; enter
{
INT16U loop;
asm(" MOVE SR,-(A7)\n ORI #$0700,SR\n");
*TPU_CISR &= ~CISR_CH7;
*TPU_PRAM7 = 0x0003;
*TPU_HSQR1 |= 0x8000;
*TPU_HSRR1 |= 0xC000;
while(((*TPU_HSRR1)&0xC000) != 0x0000);
*TPU_CISR &= ~CISR_CH7;
for(loop = 0; loop < 10; loop++)
{
asm(" NOP");
}
*TPU_HSRR1 |= 0xC000;
while((*TPU_HSRR1)&0xC000 != 0x0000);
*TPU_CISR &= ~CISR_CH7;
if(((*(TPU_PRAM7 + 1))&0x8000) == 0x8000)
{
sendMessage(MSG_ENTER);
}
*TPU_PRAM7 = 0x0007;
*TPU_HSQR1 &= ~HSQR1_CH7;
*TPU_HSRR1 |= 0xC000;
while(((*TPU_HSRR1)&0xC000) != 0x0000);
*TPU_CISR &= ~CISR_CH7;
asm(" MOVE (A7)+,SR\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -