123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475 |
- /* Adapted for use with IAR Embedded Workbench */
- /*""FILE COMMENT""*******************************************************
- * System Name : Interrupt program for RX62Nxx
- * File Name : Interrupt_INTC.c
- * Version : 1.02
- * Contents : Interrupt handlers for the external interrupts
- * Customer :
- * Model :
- * Order :
- * CPU : RX
- * Compiler : RXC
- * OS : Nothing
- * Programmer :
- * Note :
- ************************************************************************
- * Copyright, 2011. Renesas Electronics Corporation
- * and Renesas Solutions Corporation
- ************************************************************************
- * History : 2011.04.08
- * : Ver 1.02
- * : CS-5 release.
- *""FILE COMMENT END""**************************************************/
- #include "r_pdl_intc.h"
- #include "r_pdl_definitions.h"
- #include "r_pdl_user_definitions.h"
- /* External functions */
- extern void PowerON_Reset_PC(void);
- extern void rpdl_ADC_10_Start(void);
- /* CMT control register definition */
- #define CMSTR_ADDRESS(a) ( (volatile uint16_t *)&CMT.CMSTR0 + ( (0x10u * (a >> 1)) / sizeof(uint16_t)) )
- /*""FUNC COMMENT""***************************************************
- * Module outline: External interrupt processing
- *-------------------------------------------------------------------
- * Declaration : void Interrupt_XXXX(void)
- *-------------------------------------------------------------------
- * Function : Interrupt processing function for External interrupts
- *-------------------------------------------------------------------
- * Argument : Nothing
- *-------------------------------------------------------------------
- * Return value : Nothing
- *------------------------------------------------------------------
- * Input :
- * Output :
- *-------------------------------------------------------------------
- * Use function : rpdl_INTC_callback_func[n]()
- *-------------------------------------------------------------------
- * Notes :
- *-------------------------------------------------------------------
- * History : 2011.04.08
- * : Ver 1.02
- * : CS-5 release.
- *""FUNC COMMENT END""**********************************************/
- #if FAST_INTC_VECTOR == VECT_ICU_IRQ0
- __fast_interrupt void Interrupt_IRQ0(void)
- #else
- #pragma vector = VECT_ICU_IRQ0
- __interrupt void Interrupt_IRQ0(void)
- #endif
- {
- /* Call the user function */
- if (rpdl_INTC_callback_func[PDL_INTC_IRQ0] != PDL_NO_FUNC)
- {
- rpdl_INTC_callback_func[PDL_INTC_IRQ0]();
- }
- }
- #if FAST_INTC_VECTOR == VECT_ICU_IRQ1
- __fast_interrupt void Interrupt_IRQ1(void)
- #else
- #pragma vector = VECT_ICU_IRQ1
- __interrupt void Interrupt_IRQ1(void)
- #endif
- {
- /* Call the user function */
- if (rpdl_INTC_callback_func[PDL_INTC_IRQ1] != PDL_NO_FUNC)
- {
- rpdl_INTC_callback_func[PDL_INTC_IRQ1]();
- }
- }
- #if FAST_INTC_VECTOR == VECT_ICU_IRQ2
- __fast_interrupt void Interrupt_IRQ2(void)
- #else
- #pragma vector = VECT_ICU_IRQ2
- __interrupt void Interrupt_IRQ2(void)
- #endif
- {
- /* Call the user function */
- if (rpdl_INTC_callback_func[PDL_INTC_IRQ2] != PDL_NO_FUNC)
- {
- rpdl_INTC_callback_func[PDL_INTC_IRQ2]();
- }
- }
- #if FAST_INTC_VECTOR == VECT_ICU_IRQ3
- __fast_interrupt void Interrupt_IRQ3(void)
- #else
- #pragma vector = VECT_ICU_IRQ3
- __interrupt void Interrupt_IRQ3(void)
- #endif
- {
- /* Call the user function */
- if (rpdl_INTC_callback_func[PDL_INTC_IRQ3] != PDL_NO_FUNC)
- {
- rpdl_INTC_callback_func[PDL_INTC_IRQ3]();
- }
- }
- #if FAST_INTC_VECTOR == VECT_ICU_IRQ4
- __fast_interrupt void Interrupt_IRQ4(void)
- #else
- #pragma vector = VECT_ICU_IRQ4
- __interrupt void Interrupt_IRQ4(void)
- #endif
- {
- /* Call the user function */
- if (rpdl_INTC_callback_func[PDL_INTC_IRQ4] != PDL_NO_FUNC)
- {
- rpdl_INTC_callback_func[PDL_INTC_IRQ4]();
- }
- }
- #if FAST_INTC_VECTOR == VECT_ICU_IRQ5
- __fast_interrupt void Interrupt_IRQ5(void)
- #else
- #pragma vector = VECT_ICU_IRQ5
- __interrupt void Interrupt_IRQ5(void)
- #endif
- {
- #ifdef DEVICE_PACKAGE_TFLGA_85
- /* This pin is not available on the 85-pin package */
- nop();
- #else
- /* Call the user function */
- if (rpdl_INTC_callback_func[PDL_INTC_IRQ5] != PDL_NO_FUNC)
- {
- rpdl_INTC_callback_func[PDL_INTC_IRQ5]();
- }
- #endif
- }
- #if FAST_INTC_VECTOR == VECT_ICU_IRQ6
- __fast_interrupt void Interrupt_IRQ6(void)
- #else
- #pragma vector = VECT_ICU_IRQ6
- __interrupt void Interrupt_IRQ6(void)
- #endif
- {
- #ifdef DEVICE_PACKAGE_TFLGA_85
- /* This pin is not available on the 85-pin package */
- nop();
- #else
- /* Call the user function */
- if (rpdl_INTC_callback_func[PDL_INTC_IRQ6] != PDL_NO_FUNC)
- {
- rpdl_INTC_callback_func[PDL_INTC_IRQ6]();
- }
- #endif
- }
- #if FAST_INTC_VECTOR == VECT_ICU_IRQ7
- __fast_interrupt void Interrupt_IRQ7(void)
- #else
- #pragma vector = VECT_ICU_IRQ7
- __interrupt void Interrupt_IRQ7(void)
- #endif
- {
- #ifdef DEVICE_PACKAGE_TFLGA_85
- /* This pin is not available on the 85-pin package */
- nop();
- #else
- /* Call the user function */
- if (rpdl_INTC_callback_func[PDL_INTC_IRQ7] != PDL_NO_FUNC)
- {
- rpdl_INTC_callback_func[PDL_INTC_IRQ7]();
- }
- #endif
- }
- #if FAST_INTC_VECTOR == VECT_ICU_IRQ8
- __fast_interrupt void Interrupt_IRQ8(void)
- #else
- #pragma vector = VECT_ICU_IRQ8
- __interrupt void Interrupt_IRQ8(void)
- #endif
- {
- /* Call the user function */
- if (rpdl_INTC_callback_func[PDL_INTC_IRQ8] != PDL_NO_FUNC)
- {
- rpdl_INTC_callback_func[PDL_INTC_IRQ8]();
- }
- }
- #if FAST_INTC_VECTOR == VECT_ICU_IRQ9
- __fast_interrupt void Interrupt_IRQ9(void)
- #else
- #pragma vector = VECT_ICU_IRQ9
- __interrupt void Interrupt_IRQ9(void)
- #endif
- {
- /* Call the user function */
- if (rpdl_INTC_callback_func[PDL_INTC_IRQ9] != PDL_NO_FUNC)
- {
- rpdl_INTC_callback_func[PDL_INTC_IRQ9]();
- }
- }
- #if FAST_INTC_VECTOR == VECT_ICU_IRQ10
- __fast_interrupt void Interrupt_IRQ10(void)
- #else
- #pragma vector = VECT_ICU_IRQ10
- __interrupt void Interrupt_IRQ10(void)
- #endif
- {
- /* Call the user function */
- if (rpdl_INTC_callback_func[PDL_INTC_IRQ10] != PDL_NO_FUNC)
- {
- rpdl_INTC_callback_func[PDL_INTC_IRQ10]();
- }
- }
- #if FAST_INTC_VECTOR == VECT_ICU_IRQ11
- __fast_interrupt void Interrupt_IRQ11(void)
- #else
- #pragma vector = VECT_ICU_IRQ11
- __interrupt void Interrupt_IRQ11(void)
- #endif
- {
- /* Call the user function */
- if (rpdl_INTC_callback_func[PDL_INTC_IRQ11] != PDL_NO_FUNC)
- {
- rpdl_INTC_callback_func[PDL_INTC_IRQ11]();
- }
- }
- #if FAST_INTC_VECTOR == VECT_ICU_IRQ12
- __fast_interrupt void Interrupt_IRQ12(void)
- #else
- #pragma vector = VECT_ICU_IRQ12
- __interrupt void Interrupt_IRQ12(void)
- #endif
- {
- /* Call the user function */
- if (rpdl_INTC_callback_func[PDL_INTC_IRQ12] != PDL_NO_FUNC)
- {
- rpdl_INTC_callback_func[PDL_INTC_IRQ12]();
- }
- }
- #if FAST_INTC_VECTOR == VECT_ICU_IRQ13
- __fast_interrupt void Interrupt_IRQ13(void)
- #else
- #pragma vector = VECT_ICU_IRQ13
- __interrupt void Interrupt_IRQ13(void)
- #endif
- {
- /* Call the user function */
- if (rpdl_INTC_callback_func[PDL_INTC_IRQ13] != PDL_NO_FUNC)
- {
- rpdl_INTC_callback_func[PDL_INTC_IRQ13]();
- }
- }
- #if FAST_INTC_VECTOR == VECT_ICU_IRQ14
- __fast_interrupt void Interrupt_IRQ14(void)
- #else
- #pragma vector = VECT_ICU_IRQ14
- __interrupt void Interrupt_IRQ14(void)
- #endif
- {
- /* Call the user function */
- if (rpdl_INTC_callback_func[PDL_INTC_IRQ14] != PDL_NO_FUNC)
- {
- rpdl_INTC_callback_func[PDL_INTC_IRQ14]();
- }
- }
- #if FAST_INTC_VECTOR == VECT_ICU_IRQ15
- __fast_interrupt void Interrupt_IRQ15(void)
- #else
- #pragma vector = VECT_ICU_IRQ15
- __interrupt void Interrupt_IRQ15(void)
- #endif
- {
- /* Call the user function */
- if (rpdl_INTC_callback_func[PDL_INTC_IRQ15] != PDL_NO_FUNC)
- {
- rpdl_INTC_callback_func[PDL_INTC_IRQ15]();
- }
- }
- /*""FUNC COMMENT""***************************************************
- * Module outline: Software interrupt processing
- *-------------------------------------------------------------------
- * Declaration : void Interrupt_SWINT(void)
- *-------------------------------------------------------------------
- * Function : Interrupt processing function for the software interrupt
- *-------------------------------------------------------------------
- * Argument : Nothing
- *-------------------------------------------------------------------
- * Return value : Nothing
- *------------------------------------------------------------------
- * Input :
- * Output :
- *-------------------------------------------------------------------
- * Use function : rpdl_INTC_callback_func[PDL_INTC_SWINT]()
- *-------------------------------------------------------------------
- * Notes :
- *-------------------------------------------------------------------
- * History : 2011.04.08
- * : Ver 1.02
- * : CS-5 release.
- *""FUNC COMMENT END""**********************************************/
- /*""FUNC COMMENT""***************************************************
- * Module outline: Break interrupt processing
- *-------------------------------------------------------------------
- * Declaration : void Interrupt_BRK(void)
- *-------------------------------------------------------------------
- * Function : Interrupt processing function for the break interrupt
- *-------------------------------------------------------------------
- * Argument : Nothing
- *-------------------------------------------------------------------
- * Return value : Nothing
- *------------------------------------------------------------------
- * Input :
- * Output :
- *-------------------------------------------------------------------
- * Use function :
- *-------------------------------------------------------------------
- * Notes :
- *-------------------------------------------------------------------
- * History : 2011.04.08
- * : Ver 1.02
- * : CS-5 release.
- *""FUNC COMMENT END""**********************************************/
- #if 0
- #pragma vector = 0
- __interrupt void Interrupt_BRK(void)
- {
- uint32_t * vector_location;
- volatile uint32_t * stacked_psw_ptr;
- uint32_t psw_copy;
- switch (rpdl_INTC_brk_command)
- {
- case BRK_START_ADC_10:
- rpdl_ADC_10_Start();
- break;
- case BRK_START_ADC_10_AND_SLEEP:
- rpdl_ADC_10_Start();
- /* Prevent all-module clock stop */
- SYSTEM.MSTPCRA.BIT.ACSE = 0;
- /* Select sleep or all-module clock stop */
- SYSTEM.SBYCR.BIT.SSBY = 0;
- /* Prevent out-of-order execution */
- while (SYSTEM.SBYCR.BIT.SSBY != 0);
- wait();
- break;
- case BRK_SLEEP:
- /* Prevent all-module clock stop */
- SYSTEM.MSTPCRA.BIT.ACSE = 0;
- /* Select sleep or all-module clock stop */
- SYSTEM.SBYCR.BIT.SSBY = 0;
- /* Prevent out-of-order execution */
- while (SYSTEM.SBYCR.BIT.SSBY != 0);
- wait();
- break;
- case BRK_ALL_MODULE_CLOCK_STOP:
- /* Select sleep or all-module clock stop */
- SYSTEM.SBYCR.BIT.SSBY = 0;
- /* Prevent out-of-order execution */
- while (SYSTEM.SBYCR.BIT.SSBY != 0);
- wait();
- break;
- case BRK_STANDBY:
- /* Prevent deep standby mode */
- SYSTEM.DPSBYCR.BIT.DPSBY = 0;
- /* Select standby mode */
- SYSTEM.SBYCR.BIT.SSBY = 1;
- /* Prevent out-of-order execution */
- while (SYSTEM.SBYCR.BIT.SSBY != 1);
- wait();
- break;
- case BRK_DEEP_STANDBY:
- /* Stop the RAM clock */
- SYSTEM.MSTPCRC.BIT.MSTPC0 = 1;
- SYSTEM.MSTPCRC.BIT.MSTPC1 = 1;
- /* Select deep standby mode */
- SYSTEM.DPSBYCR.BIT.DPSBY = 1;
- /* Select standby mode */
- SYSTEM.SBYCR.BIT.SSBY = 1;
- /* Prevent out-of-order execution */
- while (SYSTEM.SBYCR.BIT.SSBY != 1);
- wait();
- break;
- case BRK_LOAD_FINTV_REGISTER:
- /* Find the start of the maskable interrupt vector table */
- vector_location = (uint32_t *)get_intb();
- /* Move to the location of the address of the selected interrupt */
- vector_location += ICU.FIR.BIT.FVCT;
- /* Store the address of this vector in the FINTV register */
- set_fintv((__fast_int_f)*vector_location);
- break;
- case BRK_WRITE_IPL:
- /* Find the stacked PSW */
- stacked_psw_ptr = (uint32_t *)(rpdl_INTC_saved_isp) - 1;
- /* Read the stacked PSW */
- psw_copy = *stacked_psw_ptr;
- /* Clear the IPL bits */
- psw_copy &= (uint32_t)(INV_BIT_27 & INV_BIT_26 & INV_BIT_25 & INV_BIT_24);
- /* Modify the IPL bits */
- psw_copy |= (uint32_t)(rpdl_INTC_brk_data8 << 24);
- /* Modify the saved IPL */
- *stacked_psw_ptr = psw_copy;
- break;
- case BRK_CMT_START:
- /* Set STRn to 1 */
- *(CMSTR_ADDRESS(rpdl_INTC_brk_data8)) |= (uint16_t)((rpdl_INTC_brk_data8 & 0x01u) + 1);
- break;
- case BRK_CMT_STOP:
- /* Set STRn to 0 */
- *(CMSTR_ADDRESS(rpdl_INTC_brk_data8)) &= (uint16_t)(0x2u >> (rpdl_INTC_brk_data8 & 0x01u));
- break;
- default:
- /* This must never occur */
- break;
- }
- rpdl_INTC_brk_command = BRK_NO_COMMAND;
- }
- #endif
- /* Exception (Privileged Instruction) */
- __interrupt void __privileged_handler(void)
- {
- if (rpdl_INTC_callback_func[PDL_INTC_PRIVILEGED] != PDL_NO_FUNC)
- {
- /* Call the user function */
- rpdl_INTC_callback_func[PDL_INTC_PRIVILEGED]();
- }
- }
- /* Exception (Undefined Instruction) */
- __interrupt void __undefined_handler(void)
- {
- if (rpdl_INTC_callback_func[PDL_INTC_UNDEFINED] != PDL_NO_FUNC)
- {
- /* Call the user function */
- rpdl_INTC_callback_func[PDL_INTC_UNDEFINED]();
- }
- }
- /* Exception(Floating Point) */
- __interrupt void __floating_point_handler(void)
- {
- if (rpdl_INTC_callback_func[PDL_INTC_FLOATING_POINT] != PDL_NO_FUNC)
- {
- /* Call the user function */
- rpdl_INTC_callback_func[PDL_INTC_FLOATING_POINT]();
- }
- }
- __interrupt void __NMI_handler(void)
- {
- if (rpdl_INTC_callback_func[PDL_INTC_NMI] != PDL_NO_FUNC)
- {
- /* Call the user function */
- rpdl_INTC_callback_func[PDL_INTC_NMI]();
- }
- }
- /* End of file */
|