/**
* @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);
} |