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.