SW0, SW1 button int test.
Diff: main.cpp
- Revision:
- 0:044197641ae8
- Child:
- 1:a88865265000
diff -r 000000000000 -r 044197641ae8 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Jan 07 17:58:43 2015 +0000 @@ -0,0 +1,89 @@ +#include "mbed.h" + +#define BTN0_PIN P6_0 +#define BTN1_PIN P6_1 +#define BTN0_IRQ IRQ5_IRQn +#define BTN1_IRQ IRQ4_IRQn + +InterruptIn button0(BTN0_PIN); +InterruptIn button1(BTN1_PIN); +DigitalOut rled(LED_RED); +DigitalOut bled(LED_BLUE); + +#define DELAY_CNT 1000000000 + +void button0_int_handler() { + rled = 0; + for (int i = 0; i <= DELAY_CNT; i++) ; + rled = 1; +} + +void button1_int_handler() { + bled = 0; + for (int i = 0; i <= DELAY_CNT; i++) ; + bled = 1; +} + +int32_t R_INTC_SetPriority(uint16_t int_id, uint8_t priority); + +int main() { + rled = 1; + bled = 1; + R_INTC_SetPriority(BTN0_IRQ, 1); + button0.fall(&button0_int_handler); + button1.fall(&button1_int_handler); + while(1) { + wait(1); + } +} + +/** + * http://japan.renesas.com/req/sample_code.do?event=searchProducts&%20expandedProductsId=1&productsId=186374 + */ +#include "r_typedefs.h" +#include "dev_drv.h" /* Device Driver common header */ +//#include "devdrv_intc.h" /* INTC Driver Header */ +#include "iodefine.h" +#define INTC_ID_TOTAL (587) +/****************************************************************************** +* Function Name: R_INTC_SetPriority +* Description : Sets the priority level of the ID specified by the int_id to +* : the priority level specified by the priority. +* Arguments : uint16_t int_id : Interrupt ID +* : uint8_t priority : Interrupt priority level (0 to 31) +* Return Value : DEVDRV_SUCCESS : Success of INTC interrupt priority level setting +* : DEVDRV_ERROR : Failure of INTC interrupt priority level setting +******************************************************************************/ +int32_t R_INTC_SetPriority(uint16_t int_id, uint8_t priority) +{ + uint32_t icdipr; + uint32_t mask; + volatile uint32_t * addr; + + /* ==== Argument check ==== */ + if ((int_id >= INTC_ID_TOTAL) || priority >= 32) + { + return DEVDRV_ERROR; /* Argument error */ + } + + priority = priority << 3; /* Priority[7:3] of ICDIPRn is valid bit */ + + /* ICDIPRn has 4 sources in the 32 bits */ + /* The n can be calculated by int_id / 4 */ + /* The bit field width is 8 bits */ + /* The target bit can be calculated by (int_id % 4) * 8 */ + addr = (volatile uint32_t *)&INTC.ICDIPR0; + + icdipr = *(addr + (int_id / 4)); /* Read ICDIPRn */ + + mask = (uint32_t)0x000000FFuL; /* ---- Mask ---- */ + mask = mask << ((int_id % 4) * 8); /* Shift to target bit */ + icdipr &= ~mask; /* Clear priority */ + mask = (uint32_t)priority; /* ---- Priority ---- */ + mask = mask << ((int_id % 4) * 8); /* Shift to target bit */ + icdipr |= mask; /* Set priority */ + + *(addr + (int_id / 4)) = icdipr; /* Write ICDIPRn */ + + return DEVDRV_SUCCESS; +}