44 #if defined(CHIP_LPC43XX)
54 __I uint32_t RESERVED0[3];
62 #define SPI_CR_BITMASK ((uint32_t) 0xFFC)
64 #define SPI_CR_BIT_EN ((uint32_t) (1 << 2))
66 #define SPI_CR_BITS_MASK ((uint32_t) 0xF00)
68 #define SPI_CR_BITS(n) ((uint32_t) ((n << 8) & 0xF00))
70 #define SPI_CR_CPHA_FIRST ((uint32_t) (0))
71 #define SPI_CR_CPHA_SECOND ((uint32_t) (1 << 3))
73 #define SPI_CR_CPOL_LO ((uint32_t) (0))
74 #define SPI_CR_CPOL_HI ((uint32_t) (1 << 4))
76 #define SPI_CR_SLAVE_EN ((uint32_t) 0)
78 #define SPI_CR_MASTER_EN ((uint32_t) (1 << 5))
80 #define SPI_CR_MSB_FIRST_EN ((uint32_t) 0)
82 #define SPI_CR_LSB_FIRST_EN ((uint32_t) (1 << 6))
84 #define SPI_CR_INT_EN ((uint32_t) (1 << 7))
90 #define SPI_SR_BITMASK ((uint32_t) 0xF8)
92 #define SPI_SR_ABRT ((uint32_t) (1 << 3))
94 #define SPI_SR_MODF ((uint32_t) (1 << 4))
96 #define SPI_SR_ROVR ((uint32_t) (1 << 5))
98 #define SPI_SR_WCOL ((uint32_t) (1 << 6))
100 #define SPI_SR_SPIF ((uint32_t) (1 << 7))
102 #define SPI_SR_ERROR (SPI_SR_ABRT | SPI_SR_MODF | SPI_SR_ROVR | SPI_SR_WCOL)
107 #define SPI_TCR_TEST(n) ((uint32_t) ((n & 0x3F) << 1))
113 #define SPI_INT_SPIF ((uint32_t) (1 << 0))
119 #define SPI_DR_DATA(n) ((uint32_t) ((n) & 0xFFFF))
123 SPI_MODE_MASTER = SPI_CR_MASTER_EN,
124 SPI_MODE_SLAVE = SPI_CR_SLAVE_EN,
129 SPI_CLOCK_CPHA0_CPOL0 = SPI_CR_CPOL_LO | SPI_CR_CPHA_FIRST,
130 SPI_CLOCK_CPHA0_CPOL1 = SPI_CR_CPOL_HI | SPI_CR_CPHA_FIRST,
131 SPI_CLOCK_CPHA1_CPOL0 = SPI_CR_CPOL_LO | SPI_CR_CPHA_SECOND,
132 SPI_CLOCK_CPHA1_CPOL1 = SPI_CR_CPOL_HI | SPI_CR_CPHA_SECOND,
133 SPI_CLOCK_MODE0 = SPI_CLOCK_CPHA0_CPOL0,
134 SPI_CLOCK_MODE1 = SPI_CLOCK_CPHA1_CPOL0,
135 SPI_CLOCK_MODE2 = SPI_CLOCK_CPHA0_CPOL1,
136 SPI_CLOCK_MODE3 = SPI_CLOCK_CPHA1_CPOL1,
141 SPI_DATA_MSB_FIRST = SPI_CR_MSB_FIRST_EN,
142 SPI_DATA_LSB_FIRST = SPI_CR_LSB_FIRST_EN,
149 SPI_BITS_8 = SPI_CR_BITS(8),
150 SPI_BITS_9 = SPI_CR_BITS(9),
151 SPI_BITS_10 = SPI_CR_BITS(10),
152 SPI_BITS_11 = SPI_CR_BITS(11),
153 SPI_BITS_12 = SPI_CR_BITS(12),
154 SPI_BITS_13 = SPI_CR_BITS(13),
155 SPI_BITS_14 = SPI_CR_BITS(14),
156 SPI_BITS_15 = SPI_CR_BITS(15),
157 SPI_BITS_16 = SPI_CR_BITS(16),
161 typedef void (*SPI_CALLBACK_T)(void);
167 SPI_CLOCK_MODE_T clockMode;
168 SPI_DATA_ORDER_T dataOrder;
169 } SPI_CONFIG_FORMAT_T;
179 SPI_CALLBACK_T fnBefFrame;
180 SPI_CALLBACK_T fnAftFrame;
181 SPI_CALLBACK_T fnBefTransfer;
182 SPI_CALLBACK_T fnAftTransfer;
189 STATIC INLINE uint32_t Chip_SPI_GetStatus(LPC_SPI_T *pSPI)
200 STATIC INLINE void Chip_SPI_SendFrame(LPC_SPI_T *pSPI, uint16_t data)
202 pSPI->DR = SPI_DR_DATA(data);
210 STATIC INLINE uint16_t Chip_SPI_ReceiveFrame(LPC_SPI_T *pSPI)
212 return SPI_DR_DATA(pSPI->DR);
223 STATIC INLINE void Chip_SPI_SetClockCounter(LPC_SPI_T *pSPI, uint32_t counter)
234 STATIC INLINE void Chip_SPI_SetFormat(LPC_SPI_T *pSPI, SPI_CONFIG_FORMAT_T *format)
236 pSPI->CR = (pSPI->CR & (~0xF1C)) | SPI_CR_BIT_EN | format->bits | format->clockMode | format->dataOrder;
244 STATIC INLINE SPI_BITS_T Chip_SPI_GetDataSize(LPC_SPI_T *pSPI)
246 return (pSPI->CR & SPI_CR_BIT_EN) ? ((SPI_BITS_T) (pSPI->CR & SPI_CR_BITS_MASK)) : SPI_BITS_8;
254 STATIC INLINE SPI_CLOCK_MODE_T Chip_SPI_GetClockMode(LPC_SPI_T *pSPI)
256 return (SPI_CLOCK_MODE_T) (pSPI->CR & (3 << 3));
264 STATIC INLINE SPI_MODE_T Chip_SPI_GetMode(LPC_SPI_T *pSPI)
266 return (SPI_MODE_T) (pSPI->CR & (1 << 5));
275 STATIC INLINE void Chip_SPI_SetMode(LPC_SPI_T *pSPI, SPI_MODE_T mode)
277 pSPI->CR = (pSPI->CR & (~(1 << 5))) | mode;
286 void Chip_SPI_SetBitRate(LPC_SPI_T *pSPI, uint32_t bitRate);
295 pSPI->CR |= SPI_CR_INT_EN;
303 STATIC INLINE void Chip_SPI_Int_Disable(LPC_SPI_T *pSPI)
305 pSPI->CR &= ~SPI_CR_INT_EN;
313 STATIC INLINE uint32_t Chip_SPI_Int_GetStatus(LPC_SPI_T *pSPI)
324 STATIC INLINE void Chip_SPI_Int_ClearStatus(LPC_SPI_T *pSPI, uint32_t mask)
334 void Chip_SPI_Init(LPC_SPI_T *pSPI);
342 void Chip_SPI_DeInit(LPC_SPI_T *pSPI);
349 void Chip_SPI_Int_FlushData(LPC_SPI_T *pSPI);
358 Status Chip_SPI_Int_RWFrames8Bits(LPC_SPI_T *pSPI, SPI_DATA_SETUP_T *xf_setup);
367 Status Chip_SPI_Int_RWFrames16Bits(LPC_SPI_T *pSPI, SPI_DATA_SETUP_T *xf_setup);
380 uint32_t Chip_SPI_RWFrames_Blocking(LPC_SPI_T *pSPI, SPI_DATA_SETUP_T *pXfSetup);
392 uint32_t Chip_SPI_WriteFrames_Blocking(LPC_SPI_T *pSPI, uint8_t *buffer, uint32_t buffer_len);
404 uint32_t Chip_SPI_ReadFrames_Blocking(LPC_SPI_T *pSPI, uint8_t *buffer, uint32_t buffer_len);