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

📄 massint_tbh.c

📁 uCOS在PIC芯片中的移植:以PIC24HJ64GP210为例进行uCOS在Microchip芯片中的移植
💻 C
字号:
/*
*********************************************************************************************************
*                                              Microchip PIC24FJ
*                                            Board Support Package
*
*                                                   Micrium
*                                    (c) Copyright 2005, Micrium, Weston, FL
*                                              All Rights Reserved
*
*
* File : MassInt.C
* By   : //tbh080522
*********************************************************************************************************
*/

#include <includes.h>


#define SET_PWM(ocrs,pwm_set) \
	if(ocrs+CNT_OCRS_STEP<pwm_set) \
		ocrs=ocrs+CNT_OCRS_STEP; \
	else if(ocrs>pwm_set+CNT_OCRS_STEP)\ 
		ocrs=ocrs-CNT_OCRS_STEP;\ 
	else if(ocrs!=pwm_set)\ 
		ocrs=pwm_set


INT16U  TimeCnt=0x0000;

//每AD通道的計算變量
static INT32U  An0ValSum=0x00000000,An1ValSum=0x00000000,An2ValSum=0x00000000,An3ValSum=0x00000000;
//計算AD值時的Dma中斷計數
static INT8U   DmaIntNum=0x00;
//每AD通道的計算值
INT16U  An0Val=0x0000,An1Val=0x0000,An2Val=0x0000,An3Val=0x0000;

INT8U IC1Cnt=0xFF,IC2Cnt=0xFF,IC3Cnt=0xFF,IC4Cnt=0xFF;

INT8U PWMCnt=0x0000;
INT16U TatakiPwmSet=0x0000,UpPwmSet=0x0000,DownPwmSet=0x0000,MomiCwPwmSet=0x0000,MomiCcwPwmSet=0x0000,FrontPwmSet=0x0000,BackPwmSet=0x0000,TestPwmSet=0x0000;
//INT16U OC1RSSet,OC2RSSet,OC3RSSet,OC5RSSet,OC6RSSet,OC7RSSet,OC8RSSet,OC4RSSet;

INT16U Time10msCnt1=0x0000,Time10msCnt2=0x0000;
INT8U DlyStat=0;

void Timer1_ISR_Handler (void)
{
	//tbh080627b
#if OS_CRITICAL_METHOD == 3                  /* Allocate storage for CPU status register               */
    OS_CPU_SR  cpu_sr = 0;
#endif
	OS_ENTER_CRITICAL();//禁止中断处理时进入其它中断,可以有效节省被中断任务的堆栈空间
	//tbh080627e
	
	if(++TimeCnt>=10)
	{
		
#ifdef USER_DEBUG

			if(UDAimPst!=UDNowPst)
			{
				Time10msCnt1=0x0000;

        		if(EnDtct==EN_SHDR_DTCT)
        		{
        			UDNowPst=PB(400);
        			UDAimPst=UDNowPst;
        		}
        		else
					UDNowPst=UDAimPst;
        		OSMboxPost(MboxUD_Sur,YZ_MBOX_PST_ARRV);
			}
			
//		switch(DlyStat)
//		{
//		case 0:
//			if(UDAimPst!=UDNowPst)
//			{
//				
//				//				Time10msCnt1=0x0000;  
//				DlyStat=1;
//		case 1:
//					if(Time10msCnt1<100)  
//						Time10msCnt1++;
//					else
//					{
//						DlyStat=2;
//		case 2:   
//			
//							
//				if(EnDtct==EN_SHDR_DTCT) 
//				{ 
//					UDNowPst=PB(400);
//					OSMboxPost(MboxUD_Sur,YZ_MBOX_PST_ARRV); 
//					
//					
//								Time10msCnt1=0x0000;
//								DlyStat=3;
//		case 3:
//									if((Time10msCnt1<10)&&(UDNowPst!=UDAimPst)) 
//										Time10msCnt1++;
//									else
//									{     
//										
//										
//					UDAimPst=UDNowPst;      
//					
//					
//										DlyStat=0;
//									}
//									break;  
//								
//										
//				}
//				else
//				{
//					UDNowPst=UDAimPst;
//					OSMboxPost(MboxUD_Sur,YZ_MBOX_PST_ARRV);  
//				
//						
//								DlyStat=0;    
//								
//				}
//							break;
//					}
//					break;
//			}
//			break;
//
//		}	
		
		if(FBAimPst!=FBNowPst)
		{
			//OSTimeDlyHMSM(0, 0, 1, 0);   //在中断处理中执行延时,延时的并不是目前中断,而是已被中断的当前任务。
			                               //所以可能会把包括空闲任务在内的所有任务挂起,导致中断返回时没有任务可以恢复而使系统崩溃 
            if(EnDtct==EN_BODY_DTCT)
            	FBNowPst=PF(70);
            else
				FBNowPst=FBAimPst;
            OSMboxPost(MboxFB_Sur,YZ_MBOX_PST_ARRV);
		}
#endif			
		TimeCnt=0;
	    //_RF13^=1;//test080521
	    _RG12^=1;//test080521
	}
	
    
    OS_EXIT_CRITICAL();//tbh080627
}

void Timer2_ISR_Handler (void)
{
	//tbh080627b
#if OS_CRITICAL_METHOD == 3                  /* Allocate storage for CPU status register               */
    OS_CPU_SR  cpu_sr = 0;
#endif
	OS_ENTER_CRITICAL();//禁止中断处理时进入其它中断,可以有效节省被中断任务的堆栈空间
	//tbh080627e
	
	if(IC1Cnt<0xFF)
		IC1Cnt++;
	if(IC2Cnt<0xFF)
		IC2Cnt++;
	if(IC3Cnt<0xFF)
		IC3Cnt++;
	if(IC4Cnt<0xFF)
		IC4Cnt++;
    
    OS_EXIT_CRITICAL();//tbh080627
}

//PWM周期中断处理,实现各PWM设置的缓变过程
void Timer3_ISR_Handler (void)
{
	//tbh080627b
#if OS_CRITICAL_METHOD == 3                  /* Allocate storage for CPU status register               */
    OS_CPU_SR  cpu_sr = 0;
#endif
	OS_ENTER_CRITICAL();//禁止中断处理时进入其它中断,可以有效节省被中断任务的堆栈空间
	//tbh080627e
	
	if(++PWMCnt>=CNT_PWM_NUM)
	{
		PWMCnt=0;
		
        SET_PWM(SFR_OCRS_TATAKI,TatakiPwmSet);
        
		if(SFR_OCRS_BACK==0x0000) 
		{
        	SET_PWM(SFR_OCRS_FRONT,FrontPwmSet);
        }
		if(SFR_OCRS_FRONT==0x0000) 
		{
        	SET_PWM(SFR_OCRS_BACK,BackPwmSet);
        }
        
		if(SFR_OCRS_MOMICCW==0x0000) 
		{
        	SET_PWM(SFR_OCRS_MOMICW,MomiCwPwmSet);
    	}
		if(SFR_OCRS_MOMICW==0x0000) 
		{
        	SET_PWM(SFR_OCRS_MOMICCW,MomiCcwPwmSet);
        }
        
		if(SFR_OCRS_DOWN==0x0000) 
		{
        	SET_PWM(SFR_OCRS_UP,UpPwmSet);
        }
		if(SFR_OCRS_UP==0x0000) 
		{
        	SET_PWM(SFR_OCRS_DOWN,DownPwmSet);
        }
        
        SET_PWM(SFR_OCRS_TEST,TestPwmSet);
        
//		if(OC6RS==0x0000) 
//		{
//			if(OC5RS+CNT_OCRS_STEP<MomiCwPwmSet) 
//				OC5RS=OC5RS+CNT_OCRS_STEP; 
//			else if(OC5RS>MomiCwPwmSet+CNT_OCRS_STEP) 
//				OC5RS=OC5RS-CNT_OCRS_STEP; 
//			else if(OC5RS!=MomiCwPwmSet) 
//				OC5RS=MomiCwPwmSet;
//    	}    
//		if(OC5RS==0x0000) 
//		{
//			if(OC6RS+CNT_OCRS_STEP<MomiCcwPwmSet)
//				OC6RS=OC6RS+CNT_OCRS_STEP; 
//			else if(OC6RS>MomiCcwPwmSet+CNT_OCRS_STEP) 
//				OC6RS=OC6RS-CNT_OCRS_STEP; 
//			else if(OC6RS!=MomiCcwPwmSet) 
//				OC6RS=MomiCcwPwmSet;
//		}	
		
	    _RF13^=1;//test080521
	}
	
    OS_EXIT_CRITICAL();//tbh080627
}

void Mass_RxISRHandler (void)
{
	//tbh080627b
#if OS_CRITICAL_METHOD == 3                  /* Allocate storage for CPU status register               */
    OS_CPU_SR  cpu_sr = 0;
#endif
	OS_ENTER_CRITICAL();//禁止中断处理时进入其它中断,可以有效节省被中断任务的堆栈空间
	//tbh080627e
	
    RecvServer(U1RXREG);	
	
    OS_EXIT_CRITICAL();//tbh080627
}

void Mass_TxISRHandler (void)
{
	//tbh080627b
#if OS_CRITICAL_METHOD == 3                  /* Allocate storage for CPU status register               */
    OS_CPU_SR  cpu_sr = 0;
#endif
	OS_ENTER_CRITICAL();//禁止中断处理时进入其它中断,可以有效节省被中断任务的堆栈空间
	//tbh080627e
	
    SendServer();
	
    OS_EXIT_CRITICAL();//tbh080627
}

INT16U  An0Buf,An1Buf,An2Buf,An3Buf;
void Mass_ADC1ISRHandler (void)
{
	//tbh080627b
#if OS_CRITICAL_METHOD == 3                  /* Allocate storage for CPU status register               */
    OS_CPU_SR  cpu_sr = 0;
#endif
	OS_ENTER_CRITICAL();//禁止中断处理时进入其它中断,可以有效节省被中断任务的堆栈空间
	//tbh080627e
	
	_RG14^=1;//test080521
	
    OS_EXIT_CRITICAL();//tbh080627
}

#define A_DMA_NUM (1<<CNT_AN_DMA_WORDS_ORDER)

#ifdef USER_DEBUG

INT16S  An0Cur=0x0000,An1Cur=0x0000,An2Cur=0x0000,An3Cur=0x0000;
extern INT8U Rest;
#endif

void Mass_DMA0ISRHandler (void)
{
    INT8U i;
    INT16U *dma_addr=AdDmaSpace,ad_num;
	//tbh080627b
#if OS_CRITICAL_METHOD == 3                  /* Allocate storage for CPU status register               */
    OS_CPU_SR  cpu_sr = 0;
#endif
	OS_ENTER_CRITICAL();//禁止中断处理时进入其它中断,可以有效节省被中断任务的堆栈空间
	//tbh080627e
	
    _RB10^=1;
    //An0Buf=*(INT16U*)((INT8U*)&_DMA_BASE+DMA0STA);
    for(i=0;i<A_DMA_NUM;i++)
    {
        An0ValSum+=*(dma_addr++);
    }
    for(i=0;i<A_DMA_NUM;i++)
    {
        An1ValSum+=*(dma_addr++);
    }
    for(i=0;i<A_DMA_NUM;i++)
    {
        An2ValSum+=*(dma_addr++);
    }
    for(i=0;i<A_DMA_NUM;i++)
    {
        An3ValSum+=*(dma_addr++);
    }
    DmaIntNum++;
    ad_num=DmaIntNum*A_DMA_NUM;
    if(ad_num>=CNT_AN_COL_NUM)
    {
    	An0Val=An0ValSum/ad_num;
    	An1Val=An1ValSum/ad_num;
    	An2Val=An2ValSum/ad_num;
    	An3Val=An3ValSum/ad_num;
    	An0ValSum=0x00000000;
    	An1ValSum=0x00000000;
    	An2ValSum=0x00000000;
    	An3ValSum=0x00000000;
    	DmaIntNum=0x00;
#ifdef USER_DEBUG
        if(++Rest>=100)
        {           
        	Rest=0x00;
        }
#endif
        
    }
	
    OS_EXIT_CRITICAL();//tbh080627
}

void Mass_TatakiPrdISRHandler (void)//IC1,Pin68,M1Sensor
{
}

void Mass_UpDownPrdISRHandler (void)//IC4,Pin71,MS14Sensor
{
}

void Mass_FrntBckPrdISRHandler (void)//IC3,Pin70,MS5Sensor
{
}

void Mass_MomiPrdISRHandler (void)//IC6,Pin80,MS6Sensor
{
}

void Mass_IC2ISRHandler(void)
{
}

void Mass_IC3ISRHandler(void)
{
}

void Mass_IC7ISRHandler(void)
{
}

void Mass_IC8ISRHandler(void)
{
}

void CN_ISR_Handler  (void)
{
	//tbh080627b
#if OS_CRITICAL_METHOD == 3                  /* Allocate storage for CPU status register               */
    OS_CPU_SR  cpu_sr = 0;
#endif
	OS_ENTER_CRITICAL();//禁止中断处理时进入其它中断,可以有效节省被中断任务的堆栈空间
	//tbh080627e
	
    Momi_Wide ();
	
    OS_EXIT_CRITICAL();//tbh080627
}  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -