/** * @briefClear the specified event flag in State Configurable Timer * @parampSCT: The base of SCT peripheral on the chip * @paramevt: Event value * @returnNothing */ STATIC INLINE void Chip_SCT_ClearEventFlag(LPC_SCT_T *pSCT, CHIP_SCT_EVENT_T evt) { pSCT->EVFLAG |= evt; } |
void SCT0_IRQHandler(void) { if (LPC_SCT0->EVFLAG & SCT_EVT_0) { Board_LED_Set(0,false); [color=#f00]LPC_SCT0->EVFLAG = SCT_EVT_0; //clear EVENT0 only[/color] Board_LED_Set(0,true); } if (LPC_SCT0->EVFLAG & SCT_EVT_1) { Board_LED_Set(1,false); [color=#f00]LPC_SCT0->EVFLAG = SCT_EVT_1; //clear EVENT1 only[/color] Board_LED_Set(1,true); } } |
uint32_t ev = LPC_SCT->EVFLAG; if (ev & SCT_EVT_0) { // processing ... LPC_SCT->EVFLAG |= SCT_EVT_0; } |
uint32_t ev = LPC_SCT->EVFLAG; if (ev & SCT_EVT_1) { // processing ... LPC_SCT->EVFLAG |= SCT_EVT_1; } |
uint32_t ev = LPC_SCT->EVFLAG; LPC_SCT->EVFLAG |= ev; |
LPC_SCT->EVFLAG |= SCT_EVT_0; |
LPC_SCT->EVFLAG |= SCT_EVT_0; |
void LPC_SCT_IRQ_Handler() { uint32_t ev = LPC_SCT->EVFLAG; if (ev & SCT_EVT_0) { // channel 0 handler ... LPC_SCT->EVFLAG |= SCT_EVT_0; } if (ev & SCT_EVT_1) { // channel 1 handler ... LPC_SCT->EVFLAG |= SCT_EVT_1; } } void Init() { Chip_INMUX_SelectSCT0Src(0, SCT0_INMUX_PIO1_7); Chip_INMUX_SelectSCT0Src(1, SCT0_INMUX_PIO1_6); Chip_SCT_Init(LPC_SCT); Chip_SCT_Config(LPC_SCT, SCT_CONFIG_32BIT_COUNTER | SCT_CONFIG_CLKMODE_BUSCLK | (3 << 9); LPC_SCT->REGMODE = 0x03; LPC_SCT->EVEN = 0x03; LPC_SCT->CAPCTRL[0].U = _BIT(0); // event 0 is causing capture 0 LPC_SCT->CAPCTRL[1].U = _BIT(1); // event 1 is causing capture 1 // setup channel 0 event LPC_SCT->EVENT[0].STATE = 0xFFFF; // event happens in all states LPC_SCT->EVENT[0].CTRL = _SBF( 6, 0) | // IN_0 _SBF(10, 2) | // falling edge _SBF(12, 2); // IO condition only // setup channel 1 event LPC_SCT->EVENT[1].STATE = 0xFFFF; // event happens in all states LPC_SCT->EVENT[1].CTRL = _SBF( 6, 1) | // IN_1 _SBF(10, 2) | // falling edge _SBF(12, 2); // IO condition only NVIC_EnableIRQ(LPC_SCT_IRQn); Chip_SCTPWM_Start(LPC_SCT); } |