📄 massint.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;
//定时器2溢出计数,用于计算各捕获信号的周期
INT8U IC1T2OverCnt=0xFF,IC2T2OverCnt=0xFF,IC3T2OverCnt=0xFF,IC4T2OverCnt=0xFF;
//出退计数,升降计数
INT8U 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
UdStatusContrel(); //升降马达状态控制函数
FbStatusContrel(); //前后马达状态控制函数
if(++TimeCnt>=10)
{
#ifdef USER_DEBUG
#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(IC1T2OverCnt<0xFF)
IC1T2OverCnt++;
if(IC2T2OverCnt<0xFF)
IC2T2OverCnt++;
if(IC3T2OverCnt<0xFF)
IC3T2OverCnt++;
if(IC4T2OverCnt<0xFF)
IC4T2OverCnt++;
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
}
//10ms定时器
void Timer7_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
// UdStatusContrel(); //升降马达状态控制函数
// FbStatusContrel(); //前后马达状态控制函数
// 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)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
#endif
OS_ENTER_CRITICAL();//禁止中断处理时进入其它中断,可以有效节省被中断任务的堆栈空间
}
#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
{
//tbh080627b
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
#endif
OS_ENTER_CRITICAL();//禁止中断处理时进入其它中断,可以有效节省被中断任务的堆栈空间
//tbh080627e
if(IC4Cnt < 0xff)
{
IC4Cnt ++;
}
OS_EXIT_CRITICAL();//tbh080627
}
void Mass_FrntBckPrdISRHandler (void)//IC3,Pin70,MS5Sensor
{
//tbh080627b
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
#endif
OS_ENTER_CRITICAL();//禁止中断处理时进入其它中断,可以有效节省被中断任务的堆栈空间
//tbh080627e
if(IC3Cnt < 0xff)
{
IC3Cnt ++;
}
OS_EXIT_CRITICAL();//tbh080627
}
void Mass_MomiPrdISRHandler (void)//IC6,Pin80,MS6Sensor
{
}
void Mass_IC2ISRHandler(void)
{
}
void Mass_IC5ISRHandler(void)
{
}
void Mass_IC7ISRHandler(void)
{
}
void Mass_IC8ISRHandler(void)
{
}
INT8U Limit_U,Limit_D,Limit_F,Limit_B;
void SetLimit(void)
{
if(MS10Sensor == 0)//shang
{
Limit_U = 1;
MassStat.MassPart=CNT_UD_BACE;//更新运行部位状态
UpPwmSet = 0;
}
else
{
Limit_U = 0;
}
if(MS13Sensor == 0)//xia
{
Limit_D = 1;
MassStat.MassPart=CNT_UD_LIMIT;//更新运行部位状态
DownPwmSet = 0;
}
else
{
Limit_D = 0;
}
if(MS2Sensor == 0) //前
{
Limit_F = 1;
MassStat.FrontLmit=1;
FrontPwmSet = 0;
}
else
{
Limit_F = 0;
MassStat.FrontLmit=0;
}
if(MS3Sensor == 0)//后
{
Limit_B = 1;
MassStat.BackLmit=1;
BackPwmSet = 0;
}
else
{
Limit_B = 0;
MassStat.BackLmit=0;
}
}
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 ();
SetLimit();
OS_EXIT_CRITICAL();//tbh080627
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -