123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568 |
- /*""FILE COMMENT""*******************************************************
- * System Name : Interrupt program for RX62Nxx
- * File Name : Interrupt_SPI.c
- * Version : 1.02
- * Contents : Interrupt handlers for all SPI channels
- * 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_spi.h"
- #include "r_pdl_definitions.h"
- #include "r_pdl_user_definitions.h"
- /*""FUNC COMMENT""***************************************************
- * Module outline: SPIn receive data error interrupt processing
- *-------------------------------------------------------------------
- * Declaration : void Interrupt_RSPIn_SPEIn(void)
- *-------------------------------------------------------------------
- * Function :
- *-------------------------------------------------------------------
- * Argument : Nothing
- *-------------------------------------------------------------------
- * Return value : Nothing
- *-------------------------------------------------------------------
- * Output : None
- *-------------------------------------------------------------------
- * Use function : rpdl_SPI_callback_func[n]
- *-------------------------------------------------------------------
- * Notes :
- *-------------------------------------------------------------------
- * History : 2011.04.08
- * : Ver 1.02
- * : CS-5 release.
- *""FUNC COMMENT END""**********************************************/
- #if FAST_INTC_VECTOR == VECT_RSPI0_SPEI0
- __fast_interrupt void Interrupt_RSPI0_SPEI0(void)
- #else
- #pragma vector = VECT_RSPI0_SPEI0
- __interrupt void Interrupt_RSPI0_SPEI0(void)
- #endif
- {
- /* Will the user handle the errors? */
- if (rpdl_SPI_callback_func[0] != PDL_NO_FUNC)
- {
- /* Notify the user */
- rpdl_SPI_callback_func[0]();
- }
- }
- #if FAST_INTC_VECTOR == VECT_RSPI1_SPEI1
- __fast_interrupt void Interrupt_RSPI1_SPEI1(void)
- #else
- #pragma vector = VECT_RSPI1_SPEI1
- __interrupt void Interrupt_RSPI1_SPEI1(void)
- #endif
- {
- /* Will the user handle the errors? */
- if (rpdl_SPI_callback_func[1] != PDL_NO_FUNC)
- {
- /* Notify the user */
- rpdl_SPI_callback_func[1]();
- }
- }
- /*""FUNC COMMENT""***************************************************
- * Module outline: SPIn receive data interrupt processing
- *-------------------------------------------------------------------
- * Declaration : void Interrupt_RSPIn_SPRIn(void)
- *-------------------------------------------------------------------
- * Function :
- *-------------------------------------------------------------------
- * Argument : Nothing
- *-------------------------------------------------------------------
- * Return value : Nothing
- *-------------------------------------------------------------------
- * Input : (I/ ) : SPDCR, SBDR
- * Output : (I/O) : SPCR, SPCR2
- *-------------------------------------------------------------------
- * Use function : None
- *-------------------------------------------------------------------
- * Notes :
- *-------------------------------------------------------------------
- * History : 2011.04.08
- * : Ver 1.02
- * : CS-5 release.
- *""FUNC COMMENT END""**********************************************/
- #if FAST_INTC_VECTOR == VECT_RSPI0_SPRI0
- __fast_interrupt void Interrupt_RSPI0_SPRI0(void)
- #else
- #pragma vector = VECT_RSPI0_SPRI0
- __interrupt void Interrupt_RSPI0_SPRI0(void)
- #endif
- {
- uint8_t frame_count;
- uint32_t received_frame;
- uint8_t spdcr_copy;
- uint8_t splw;
- uint8_t spfc;
- volatile uint32_t * rx_data_ptr;
- /* Ok to process the data? */
- if (rpdl_SPI_method[0] == SPI_USING_IRQ)
- {
- spdcr_copy = RSPI0.SPDCR.BYTE;
- splw = (uint8_t)(spdcr_copy & BIT_5);
- spfc = (uint8_t)(spdcr_copy & 0x03u);
- rx_data_ptr = rpdl_SPI_rx_ptr[0];
- /* Load the data register */
- for (frame_count = 0; frame_count <= spfc; frame_count++)
- {
- if (splw == 0)
- {
- /* Read the data */
- received_frame = (uint32_t)RSPI0.SPDR.WORD.H;
- }
- else
- {
- /* Read the data */
- received_frame = RSPI0.SPDR.LONG;
- }
- /* Store the data? */
- if (rx_data_ptr != PDL_NO_PTR)
- {
- *rx_data_ptr = received_frame;
- /* Increment the address pointer */
- rx_data_ptr ++;
- }
- /* Increment the frame counter */
- rpdl_SPI_rx_frame_counter[0] ++;
- }
- /* Store the updated pointer */
- rpdl_SPI_rx_ptr[0] = rx_data_ptr;
- /* All data read? */
- if (rpdl_SPI_rx_frame_counter[0] == rpdl_SPI_frame_total[0])
- {
- /* Increment the loop counter */
- rpdl_SPI_rx_sequence_counter[0]++;
- /* All loops completed? */
- if (rpdl_SPI_rx_sequence_counter[0] == rpdl_SPI_sequence_count[0])
- {
- /* Disable receive interrupts */
- RSPI0.SPCR.BIT.SPRIE = 0;
- /* Master mode? */
- if (RSPI0.SPCR.BIT.MSTR == 1)
- {
- /* Enable idle interrupts */
- RSPI0.SPCR2.BIT.SPIIE = 1;
- }
- else
- {
- /* Notify the user */
- if (rpdl_SPI_callback_func[0] != PDL_NO_FUNC)
- {
- rpdl_SPI_callback_func[0]();
- }
- }
- }
- else
- {
- /* Reset the frame counter */
- rpdl_SPI_rx_frame_counter[0] = 0;
- }
- }
- }
- else
- {
- /* Notify the user */
- if (rpdl_SPI_callback_func[0] != PDL_NO_FUNC)
- {
- rpdl_SPI_callback_func[0]();
- }
- }
- }
- #if FAST_INTC_VECTOR == VECT_RSPI1_SPRI1
- __fast_interrupt void Interrupt_RSPI1_SPRI1(void)
- #else
- #pragma vector = VECT_RSPI1_SPRI1
- __interrupt void Interrupt_RSPI1_SPRI1(void)
- #endif
- {
- uint8_t frame_count;
- uint32_t received_frame;
- uint8_t spdcr_copy;
- uint8_t splw;
- uint8_t spfc;
- volatile uint32_t * rx_data_ptr;
- /* Ok to process the data? */
- if (rpdl_SPI_method[1] == SPI_USING_IRQ)
- {
- spdcr_copy = RSPI1.SPDCR.BYTE;
- splw = (uint8_t)(spdcr_copy & BIT_5);
- spfc = (uint8_t)(spdcr_copy & 0x03u);
- rx_data_ptr = rpdl_SPI_rx_ptr[1];
- /* Load the data register */
- for (frame_count = 0; frame_count <= spfc; frame_count++)
- {
- if (splw == 0)
- {
- /* Read the data */
- received_frame = (uint32_t)RSPI1.SPDR.WORD.H;
- }
- else
- {
- /* Read the data */
- received_frame = RSPI1.SPDR.LONG;
- }
- /* Store the data? */
- if (rx_data_ptr != PDL_NO_PTR)
- {
- *rx_data_ptr = received_frame;
- /* Increment the address pointer */
- rx_data_ptr ++;
- }
- /* Increment the frame counter */
- rpdl_SPI_rx_frame_counter[1] ++;
- }
- /* Store the updated pointer */
- rpdl_SPI_rx_ptr[1] = rx_data_ptr;
- /* All data read? */
- if (rpdl_SPI_rx_frame_counter[1] == rpdl_SPI_frame_total[1])
- {
- /* Increment the loop counter */
- rpdl_SPI_rx_sequence_counter[1]++;
- /* All loops completed? */
- if (rpdl_SPI_rx_sequence_counter[1] == rpdl_SPI_sequence_count[1])
- {
- /* Disable receive interrupts */
- RSPI1.SPCR.BIT.SPRIE = 0;
- /* Master mode? */
- if (RSPI1.SPCR.BIT.MSTR == 1)
- {
- /* Enable idle interrupts */
- RSPI1.SPCR2.BIT.SPIIE = 1;
- }
- else
- {
- /* Notify the user */
- if (rpdl_SPI_callback_func[1] != PDL_NO_FUNC)
- {
- rpdl_SPI_callback_func[1]();
- }
- }
- }
- else
- {
- /* Reset the frame counter */
- rpdl_SPI_rx_frame_counter[1] = 0;
- }
- }
- }
- else
- {
- /* Notify the user */
- if (rpdl_SPI_callback_func[1] != PDL_NO_FUNC)
- {
- rpdl_SPI_callback_func[1]();
- }
- }
- }
- /*""FUNC COMMENT""***************************************************
- * Module outline: SPIn transmit data interrupt processing
- *-------------------------------------------------------------------
- * Declaration : void Interrupt_RSPIn_SPTIn(void)
- *-------------------------------------------------------------------
- * Function :
- *-------------------------------------------------------------------
- * Argument : Nothing
- *-------------------------------------------------------------------
- * Return value : Nothing
- *-------------------------------------------------------------------
- * Input : (I/ ) : SPDCR
- * Output : ( /O) : SBDR
- * : (I/O) : SPCR, SPCR2
- *-------------------------------------------------------------------
- * Use function :
- *-------------------------------------------------------------------
- * Notes :
- *-------------------------------------------------------------------
- * History : 2011.04.08
- * : Ver 1.02
- * : CS-5 release.
- *""FUNC COMMENT END""**********************************************/
- #if FAST_INTC_VECTOR == VECT_RSPI0_SPTI0
- __fast_interrupt void Interrupt_RSPI0_SPTI0(void)
- #else
- #pragma vector = VECT_RSPI0_SPTI0
- __interrupt void Interrupt_RSPI0_SPTI0(void)
- #endif
- {
- uint8_t frame_count;
- uint8_t spdcr_copy;
- uint8_t splw;
- uint8_t spfc;
- volatile const uint32_t * tx_data_ptr;
- /* Ok to process the string? */
- if (rpdl_SPI_method[0] == SPI_USING_IRQ)
- {
- spdcr_copy = RSPI0.SPDCR.BYTE;
- splw = (uint8_t)(spdcr_copy & BIT_5);
- spfc = (uint8_t)(spdcr_copy & 0x03u);
- tx_data_ptr = rpdl_SPI_tx_ptr[0];
- /* Load the data register */
- for (frame_count = 0; frame_count <= spfc; frame_count++)
- {
- if (splw == 0)
- {
- RSPI0.SPDR.WORD.H = (uint16_t)*tx_data_ptr;
- }
- else
- {
- RSPI0.SPDR.LONG = *tx_data_ptr;
- }
- /* Increment the address pointer? */
- if (tx_data_ptr != PDL_NO_PTR)
- {
- tx_data_ptr ++;
- }
- /* Increment the frame counter */
- rpdl_SPI_tx_frame_counter[0] ++;
- }
- /* Store the updated pointer */
- rpdl_SPI_tx_ptr[0] = tx_data_ptr;
- /* All data written? */
- if (rpdl_SPI_tx_frame_counter[0] == rpdl_SPI_frame_total[0])
- {
- /* Increment the loop counter */
- rpdl_SPI_tx_sequence_counter[0]++;
- /* All loops completed? */
- if (rpdl_SPI_tx_sequence_counter[0] == rpdl_SPI_sequence_count[0])
- {
- /* Disable transmit interrupts */
- RSPI0.SPCR.BIT.SPTIE = 0;
- /* Transmit only? */
- if (RSPI0.SPCR.BIT.TXMD == 1)
- {
- /* Master mode? */
- if (RSPI0.SPCR.BIT.MSTR == 1)
- {
- /* Enable idle interrupts */
- RSPI0.SPCR2.BIT.SPIIE = 1;
- }
- else
- {
- /* Notify the user */
- if (rpdl_SPI_callback_func[0] != PDL_NO_FUNC)
- {
- rpdl_SPI_callback_func[0]();
- }
- }
- }
- }
- else
- {
- /* Reset the frame counter */
- rpdl_SPI_tx_frame_counter[0] = 0;
- }
- }
- }
- else
- {
- /* Notify the user */
- if (rpdl_SPI_callback_func[0] != PDL_NO_FUNC)
- {
- rpdl_SPI_callback_func[0]();
- }
- }
- }
- #if FAST_INTC_VECTOR == VECT_RSPI1_SPTI1
- __fast_interrupt void Interrupt_RSPI1_SPTI1(void)
- #else
- #pragma vector = VECT_RSPI1_SPTI1
- __interrupt void Interrupt_RSPI1_SPTI1(void)
- #endif
- {
- uint8_t frame_count;
- uint8_t spdcr_copy;
- uint8_t splw;
- uint8_t spfc;
- volatile const uint32_t * tx_data_ptr;
- /* Ok to process the string? */
- if (rpdl_SPI_method[1] == SPI_USING_IRQ)
- {
- spdcr_copy = RSPI1.SPDCR.BYTE;
- splw = (uint8_t)(spdcr_copy & BIT_5);
- spfc = (uint8_t)(spdcr_copy & 0x03u);
- tx_data_ptr = rpdl_SPI_tx_ptr[1];
- /* Load the data register */
- for (frame_count = 0; frame_count <= spfc; frame_count++)
- {
- if (splw == 0)
- {
- RSPI1.SPDR.WORD.H = (uint16_t)*tx_data_ptr;
- }
- else
- {
- RSPI1.SPDR.LONG = *tx_data_ptr;
- }
- /* Increment the address pointer? */
- if (tx_data_ptr != PDL_NO_PTR)
- {
- tx_data_ptr ++;
- }
- /* Increment the frame counter */
- rpdl_SPI_tx_frame_counter[1] ++;
- }
- /* Store the updated pointer */
- rpdl_SPI_tx_ptr[1] = tx_data_ptr;
- /* All data written? */
- if (rpdl_SPI_tx_frame_counter[1] == rpdl_SPI_frame_total[1])
- {
- /* Increment the loop counter */
- rpdl_SPI_tx_sequence_counter[1]++;
- /* All loops completed? */
- if (rpdl_SPI_tx_sequence_counter[1] == rpdl_SPI_sequence_count[1])
- {
- /* Disable transmit interrupts */
- RSPI1.SPCR.BIT.SPTIE = 0;
- /* Transmit only? */
- if (RSPI1.SPCR.BIT.TXMD == 1)
- {
- /* Master mode? */
- if (RSPI1.SPCR.BIT.MSTR == 1)
- {
- /* Enable idle interrupts */
- RSPI1.SPCR2.BIT.SPIIE = 1;
- }
- else
- {
- /* Notify the user */
- if (rpdl_SPI_callback_func[1] != PDL_NO_FUNC)
- {
- rpdl_SPI_callback_func[1]();
- }
- }
- }
- }
- else
- {
- /* Reset the frame counter */
- rpdl_SPI_tx_frame_counter[1] = 0;
- }
- }
- }
- else
- {
- /* Notify the user */
- if (rpdl_SPI_callback_func[1] != PDL_NO_FUNC)
- {
- rpdl_SPI_callback_func[1]();
- }
- }
- }
- /*""FUNC COMMENT""***************************************************
- * Module outline: SPIn idle interrupt processing
- *-------------------------------------------------------------------
- * Declaration : void Interrupt_RSPIn_SPIIn(void)
- *-------------------------------------------------------------------
- * Function :
- *-------------------------------------------------------------------
- * Argument : Nothing
- *-------------------------------------------------------------------
- * Return value : Nothing
- *-------------------------------------------------------------------
- * Output : SPCR, SPCR2
- *-------------------------------------------------------------------
- * Use function : rpdl_SPI_callback_func()
- *-------------------------------------------------------------------
- * Notes :
- *-------------------------------------------------------------------
- * History : 2011.04.08
- * : Ver 1.02
- * : CS-5 release.
- *""FUNC COMMENT END""**********************************************/
- #if FAST_INTC_VECTOR == VECT_RSPI0_SPII0
- __fast_interrupt void Interrupt_RSPI0_SPII0(void)
- #else
- #pragma vector = VECT_RSPI0_SPII0
- __interrupt void Interrupt_RSPI0_SPII0(void)
- #endif
- {
- /* Disable the channel */
- RSPI0.SPCR.BIT.SPE = 0;
- /* Disable idle interrupts */
- RSPI0.SPCR2.BIT.SPIIE = 0;
- /* Call the callback function */
- if (rpdl_SPI_callback_func[0] != PDL_NO_FUNC)
- {
- rpdl_SPI_callback_func[0]();
- }
- }
- #if FAST_INTC_VECTOR == VECT_RSPI1_SPII1
- __fast_interrupt void Interrupt_RSPI1_SPII1(void)
- #else
- #pragma vector = VECT_RSPI1_SPII1
- __interrupt void Interrupt_RSPI1_SPII1(void)
- #endif
- {
- /* Disable the channel */
- RSPI1.SPCR.BIT.SPE = 0;
- /* Disable idle interrupts */
- RSPI1.SPCR2.BIT.SPIIE = 0;
- /* Call the callback function */
- if (rpdl_SPI_callback_func[1] != PDL_NO_FUNC)
- {
- rpdl_SPI_callback_func[1]();
- }
- }
- /* End of file */
|