⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msgmanager.c

📁 uCOSII在motorala单片机上的移植
💻 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 + -