31 #ifndef _ESOS_PIC24_SPI_H 32 #define _ESOS_PIC24_SPI_H 62 #define DISABLE_SCK_PIN 0x1000 63 #define ENABLE_SCK_PIN 0x0000 64 #define SCK_PIN_MASK (~DISABLE_SCK_PIN) 66 #define DISABLE_SDO_PIN 0x0800 67 #define ENABLE_SDO_PIN 0x0000 68 #define SDO_PIN_MASK (~DISABLE_SDO_PIN) 70 #define SPI_MODE16_ON 0x0400 71 #define SPI_MODE8_ON 0x0000 72 #define SPI_MODE_MASK (~SPI_MODE16_ON) 74 #define SPI_SMP_ON 0x0200 75 #define SPI_SMP_OFF 0x0000 76 #define SPI_SMP_MASK (~SPI_SMP_ON) 78 #define SPI_CKE_ON 0x0100 79 #define SPI_CKE_OFF 0x0000 80 #define SPI_CKE_MASK (~SPI_CKE_ON) 82 #define SLAVE_ENABLE_ON 0x0080 83 #define SLAVE_ENABLE_OFF 0x0000 84 #define SLAVE_ENABLE_MASK (~SLAVE_ENABLE_ON) 86 #define CLK_POL_ACTIVE_LOW 0x0040 87 #define CLK_POL_ACTIVE_HIGH 0x0000 88 #define CLK_POL_ACTIVE_MASK (~CLK_POL_ACTIVE_LOW) 90 #define MASTER_ENABLE_ON 0x0020 91 #define MASTER_ENABLE_OFF 0x0000 92 #define MASTER_ENABLE_MASK (~MASTER_ENABLE_ON) 94 #define SEC_PRESCAL_1_1 0x001c 95 #define SEC_PRESCAL_2_1 0x0018 96 #define SEC_PRESCAL_3_1 0x0014 97 #define SEC_PRESCAL_4_1 0x0010 98 #define SEC_PRESCAL_5_1 0x000c 99 #define SEC_PRESCAL_6_1 0x0008 100 #define SEC_PRESCAL_7_1 0x0004 101 #define SEC_PRESCAL_8_1 0x0000 102 #define SEC_PRESCAL_MASK (~SEC_PRESCAL_1_1) 104 #define PRI_PRESCAL_1_1 0x0003 105 #define PRI_PRESCAL_4_1 0x0002 106 #define PRI_PRESCAL_16_1 0x0001 107 #define PRI_PRESCAL_64_1 0x0000 108 #define PRI_PRESCAL_MASK (~PRI_PRESCAL_1_1) 111 #define SPI_ENABLE 0x8000 112 #define SPI_DISABLE 0x0000 113 #define SPI_ENBL_DSBL_MASK (~SPI_ENABLE) 115 #define SPI_IDLE_STOP 0x2000 116 #define SPI_IDLE_CON 0x0000 117 #define SPI_IDLE_MASK (~SPI_IDLE_STOP) 119 #define SPI_RX_OVFLOW 0x0040 120 #define SPI_RX_OVFLOW_CLR 0x0000 122 #define SPI_TX_BUFFER_FULL 0x0002 123 #define SPI_TX_BUFFER_FULL_CLR (~SPI_TX_BUFFER_FULL) 125 #define SPI_RX_BUFFER_FULL 0x0001 126 #define SPI_RX_BUFFER_FULL_CLR (~SPI_RX_BUFFER_FULL) 129 #define FRAME_ENABLE_ON 0x8000 130 #define FRAME_ENABLE_OFF 0x0000 131 #define FRAME_ENABLE_MASK (~FRAME_ENABLE_ON) 133 #define FRAME_SYNC_INPUT 0x4000 134 #define FRAME_SYNC_OUTPUT 0x0000 135 #define FRAME_SYNC_MASK (~FRAME_SYNC_INPUT) 137 #define FRAME_SYNC_ACTIVE_HIGH 0x2000 138 #define FRAME_SYNC_ACTIVE_LOW 0x0000 139 #define FRAME_SYNC_POL_MASK (~FRAME_SYNC_ACTIVE_HIGH) 141 #define SPI_FRM_PULSE_FIRST_CLK 0x0002 142 #define SPI_FRM_PULSE_PREV_CLK 0x0000 143 #define SPI_FRM_PULSE_MASK (~SPI_FRM_PULSE_FIRST_CLK) 145 #define SPI_ENH_BUFF_ENABLE 0x0001 146 #define SPI_ENH_BUFF_DISABLE 0x0000 147 #define SPI_ENH_BUFF_MASK (~SPI_ENH_BUFF_ENABLE) 151 extern struct stTask __stChildTaskSPI;
152 extern uint16_t __esos_spi_u16s[2];
156 #define ESOS_TASK_WAIT_ON_AVAILABLE_SPI() \ 158 ESOS_TASK_WAIT_WHILE(__esos_IsSystemFlagSet(__ESOS_SYS_SPI_IS_BUSY)); \ 159 __esos_SetSystemFlag(__ESOS_SYS_SPI_IS_BUSY); \ 162 #define ESOS_TASK_SIGNAL_AVAILABLE_SPI() __esos_ClearSystemFlag(__ESOS_SYS_SPI_IS_BUSY) 174 #define ESOS_TASK_WAIT_ON_WRITE1SPI1(u16_d1 ) \ 176 __esos_spi_u16s[0] = (uint16_t) (u16_d1); \ 177 ESOS_TASK_SPAWN_AND_WAIT( (ESOS_TASK_HANDLE)&__stChildTaskSPI, __esos_pic24_xferNSPI1, &__esos_spi_u16s[0], NULLPTR, 1 ); \ 196 #define ESOS_TASK_WAIT_ON_WRITE2SPI1(u16_d1, u16_d2 ) \ 198 __esos_spi_u16s[0] = (uint16_t) (u16_d1); \ 199 __esos_spi_u16s[1] = (uint16_t) (u16_d2); \ 200 ESOS_TASK_SPAWN_AND_WAIT( (ESOS_TASK_HANDLE)&__stChildTaskSPI, __esos_pic24_xferNSPI1, &__esos_spi_u16s[0], NULLPTR, 2 ); \ 214 #define ESOS_TASK_WAIT_ON_WRITENSPI1( pu16_out, u16_cnt ) \ 215 ESOS_TASK_SPAWN_AND_WAIT( (ESOS_TASK_HANDLE)&__stChildTaskSPI, __esos_pic24_xferNSPI1, (pu16_out), NULLPTR, (u16_cnt) ) 233 #define ESOS_TASK_WAIT_ON_XFERNSPI1( pu16_out, pu16_in, u16_cnt ) \ 234 ESOS_TASK_SPAWN_AND_WAIT( (ESOS_TASK_HANDLE)&__stChildTaskSPI, __esos_pic24_xferNSPI1, (pu16_out), (pu16_in), (u16_cnt) ) 247 #define ESOS_TASK_WAIT_ON_READ1SPI1(u16_d1 ) \ 249 ESOS_TASK_SPAWN_AND_WAIT( (ESOS_TASK_HANDLE)&__stChildTaskSPI, __esos_pic24_xferNSPI1, NULLPTR, &__esos_spi_u16s[0], 1 ); \ 250 (u16_d1) = __esos_spi_u16s[0]; \ 265 #define ESOS_TASK_WAIT_ON_READ2SPI1(u16_d1, u16_d2) \ 267 ESOS_TASK_SPAWN_AND_WAIT( (ESOS_TASK_HANDLE)&__stChildTaskSPI, __esos_pic24_xferNSPI1, NULLPTR, &__esos_spi_u16s[0], 2 ); \ 268 (u16_d1) = __esos_spi_u16s[0]; \ 269 (u16_d2) = __esos_spi_u16s[1]; \ 284 #define ESOS_TASK_WAIT_ON_READNSPI1( pu16_in, u16_cnt ) \ 285 ESOS_TASK_SPAWN_AND_WAIT( (ESOS_TASK_HANDLE)&__stChildTaskSPI, __esos_pic24_xferNSPI1, NULLPTR, (pu16_in), (u16_cnt) ) 289 ESOS_CHILD_TASK( __esos_pic24_xferNSPI1, uint16_t* pu16_out, uint16_t* pu16_in, uint16_t u16_cnt);
292 #endif // end ESOS_PIC24_SPI_H #define ESOS_CHILD_TASK(taskname,...)
This is the master include file for implementing ESOS on Microchip PIC24 MCUs.