/*---------------------------------------------------------------------------------------------------------*/ void TMR3_IRQHandler(void) { // clear Timer0 interrupt flag TIMER_ClearIntFlag(TIMER3); if(IR_Tx_stage==TRANSFER_START) { if(IR_bit_state==1) { // Enable PWM0 CH2 output PWM_DisableOutput(PWM0, PWM_CH_3_MASK); //Initial Timer0 to periodic mode with 222Hz(4.5ms) TIMER_Open(TIMER3, TIMER_ONESHOT_MODE, START_TRAN_SECOND); TIMER_EnableInt(TIMER3); TIMER_Start(TIMER3); IR_bit_state=0; IR_Tx_stage=TRANSFER_CONT; } } else if(IR_Tx_stage==TRANSFER_CONT) { if(IR_TX_Byten<4) { IR_TranDATA(); } else { if(IRTx_StopFlag==0) { PWM_EnableOutput(PWM0, PWM_CH_3_MASK); //Initial Timer0 to periodic mode with 1786Hz(560us) TIMER_Open(TIMER3, TIMER_ONESHOT_MODE, TRAN_BIT_ZERO); TIMER_EnableInt(TIMER3); TIMER_Start(TIMER3); IRTx_StopFlag=1; } else if(IRTx_StopFlag==1) { PWM_DisableOutput(PWM0, PWM_CH_3_MASK); IR_TX_Bitn=0; IR_TX_Byten=0; IR_Tx_stage=TRANSFER_START; IRTx_StopFlag = 0; IR_TxExecuteFLAG=0; } } } }
/*---------------------------------------------------------------------------------------------------------*/ void TMR3_IRQHandler(void) { uint8_t LearnedDataByten; //LearnedDataByten transfered from IR_Tx_LearnedDataByten // clear Timer0 interrupt flag TIMER_ClearIntFlag(TIMER3); if(IR_Tx_stage==TRANSFER_START && IR_bit_state==1) { // Enable PWM0 CH2 output PWM_DisableOutput(PWM0, PWM_CH_3_MASK); //Initial Timer0 to periodic mode with 222Hz(4.5ms) TIMER_Open(TIMER3, TIMER_ONESHOT_MODE, START_TRAN_SECOND); TIMER_EnableInt(TIMER3); TIMER_Start(TIMER3); IR_bit_state=0; IR_Tx_stage=TRANSFER_CONT; } else if(IR_Tx_stage==TRANSFER_CONT) { if(IR_LearnedFlag==0) { if(IR_TX_Byten<4) { IR_TranDATA(); } else { if(IRTx_StopFlag==0) { PWM_EnableOutput(PWM0, PWM_CH_3_MASK); //Initial Timer0 to periodic mode with 1786Hz(560us) TIMER_Open(TIMER3, TIMER_ONESHOT_MODE, TRAN_BIT_ZERO); TIMER_EnableInt(TIMER3); TIMER_Start(TIMER3); IRTx_StopFlag=1; } else if(IRTx_StopFlag==1) { PWM_DisableOutput(PWM0, PWM_CH_3_MASK); IR_TX_Bitn = 0; IR_TX_Byten = 0; IR_Tx_stage=TRANSFER_START; IRTx_StopFlag = 0; IR_TxExecuteFLAG = 0; } } } else if(IR_LearnedFlag==1) { if(IRTx_StopFlag==1) { PWM_DisableOutput(PWM0, PWM_CH_3_MASK); IR_Tx_stage=TRANSFER_START; IR_TX_Bitn=0; IR_byte_state = 0; IRTx_StopFlag = 0; IR_TxExecuteFLAG = 0; } else if(IR_TX_Bitn%2==0) { LearnedDataByten = IR_Tx_LearnedDataByten*2+IR_byte_state; PWM_EnableOutput(PWM0, PWM_CH_3_MASK); if(IR_LearnedData[LearnedDataByten] & (1 << (IR_LearnedDataLeng[IR_Tx_LearnedDataByten]/2 - IR_TX_Bitn - 1)))//IR_TX_Bitn*2 //Initial Timer0 to periodic mode with 1786Hz(560us) TIMER_Open(TIMER3, TIMER_ONESHOT_MODE, IR_FallingMaxFreq); else TIMER_Open(TIMER3, TIMER_ONESHOT_MODE, IR_FallingMinFreq); TIMER_EnableInt(TIMER3); TIMER_Start(TIMER3); IR_TX_Bitn++; } else if(IR_TX_Bitn%2==1) { LearnedDataByten = IR_Tx_LearnedDataByten*2+IR_byte_state; PWM_DisableOutput(PWM0, PWM_CH_3_MASK); if(IR_LearnedData[LearnedDataByten] & (1 << (IR_LearnedDataLeng[IR_Tx_LearnedDataByten]/2-IR_TX_Bitn-1)))//IR_TX_Bitn*2 //Initial Timer0 to periodic mode with 1786Hz(560us) TIMER_Open(TIMER3, TIMER_ONESHOT_MODE, IR_RisingMaxFreq); else TIMER_Open(TIMER3, TIMER_ONESHOT_MODE, IR_RisingMinFreq); TIMER_EnableInt(TIMER3); TIMER_Start(TIMER3); IR_TX_Bitn++; } if(IR_TX_Bitn==32 && IR_byte_state == 0) { IR_TX_Bitn=0; IR_byte_state=1; } else if((IR_TX_Bitn+31==IR_LearnedDataLeng[IR_Tx_LearnedDataByten]) && (IR_byte_state == 1)) { IRTx_StopFlag = 1; } } } }