These are the examples provided for [[/users/frank26080115/libraries/LPC1700CMSIS_Lib/]] Note, the entire "program" is not compilable!

Committer:
frank26080115
Date:
Sun Mar 20 05:38:56 2011 +0000
Revision:
0:bf7b9fba3924

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
frank26080115 0:bf7b9fba3924 1 /***********************************************************************//**
frank26080115 0:bf7b9fba3924 2 * @file ti_test.c
frank26080115 0:bf7b9fba3924 3 * @purpose This example describes how to use SPP using TI frame format
frank26080115 0:bf7b9fba3924 4 * (interrupt mode)
frank26080115 0:bf7b9fba3924 5 * @version 2.0
frank26080115 0:bf7b9fba3924 6 * @date 21. May. 2010
frank26080115 0:bf7b9fba3924 7 * @author NXP MCU SW Application Team
frank26080115 0:bf7b9fba3924 8 *---------------------------------------------------------------------
frank26080115 0:bf7b9fba3924 9 * Software that is described herein is for illustrative purposes only
frank26080115 0:bf7b9fba3924 10 * which provides customers with programming information regarding the
frank26080115 0:bf7b9fba3924 11 * products. This software is supplied "AS IS" without any warranties.
frank26080115 0:bf7b9fba3924 12 * NXP Semiconductors assumes no responsibility or liability for the
frank26080115 0:bf7b9fba3924 13 * use of the software, conveys no license or title under any patent,
frank26080115 0:bf7b9fba3924 14 * copyright, or mask work right to the product. NXP Semiconductors
frank26080115 0:bf7b9fba3924 15 * reserves the right to make changes in the software without
frank26080115 0:bf7b9fba3924 16 * notification. NXP Semiconductors also make no representation or
frank26080115 0:bf7b9fba3924 17 * warranty that such application will be suitable for the specified
frank26080115 0:bf7b9fba3924 18 * use without further testing or modification.
frank26080115 0:bf7b9fba3924 19 **********************************************************************/
frank26080115 0:bf7b9fba3924 20 #include "lpc17xx_ssp.h"
frank26080115 0:bf7b9fba3924 21 #include "lpc17xx_libcfg.h"
frank26080115 0:bf7b9fba3924 22 #include "lpc17xx_pinsel.h"
frank26080115 0:bf7b9fba3924 23 #include "debug_frmwrk.h"
frank26080115 0:bf7b9fba3924 24
frank26080115 0:bf7b9fba3924 25 /* Example group ----------------------------------------------------------- */
frank26080115 0:bf7b9fba3924 26 /** @defgroup SSP_TI TI
frank26080115 0:bf7b9fba3924 27 * @ingroup SSP_Examples
frank26080115 0:bf7b9fba3924 28 * @{
frank26080115 0:bf7b9fba3924 29 */
frank26080115 0:bf7b9fba3924 30
frank26080115 0:bf7b9fba3924 31 /************************** PRIVATE DEFINITIONS ***********************/
frank26080115 0:bf7b9fba3924 32 /* Idle char */
frank26080115 0:bf7b9fba3924 33 #define IDLE_CHAR 0xFF
frank26080115 0:bf7b9fba3924 34
frank26080115 0:bf7b9fba3924 35 /** Used SSP device as master definition */
frank26080115 0:bf7b9fba3924 36 #define USEDSSPDEV_M 0
frank26080115 0:bf7b9fba3924 37
frank26080115 0:bf7b9fba3924 38 /** Used SSP device as slave definition */
frank26080115 0:bf7b9fba3924 39 #define USEDSSPDEV_S 1
frank26080115 0:bf7b9fba3924 40
frank26080115 0:bf7b9fba3924 41 /** Max buffer length */
frank26080115 0:bf7b9fba3924 42 #define BUFFER_SIZE 0x40
frank26080115 0:bf7b9fba3924 43
frank26080115 0:bf7b9fba3924 44 #if (USEDSSPDEV_M == USEDSSPDEV_S)
frank26080115 0:bf7b9fba3924 45 #error "Master and Slave SSP device are duplicated!"
frank26080115 0:bf7b9fba3924 46 #endif
frank26080115 0:bf7b9fba3924 47
frank26080115 0:bf7b9fba3924 48 #if (USEDSSPDEV_M == 0)
frank26080115 0:bf7b9fba3924 49 #define SSPDEV_M LPC_SSP0
frank26080115 0:bf7b9fba3924 50 #elif (USEDSSPDEV_M == 1)
frank26080115 0:bf7b9fba3924 51 #define SSPDEV_M LPC_SSP1
frank26080115 0:bf7b9fba3924 52 #elif
frank26080115 0:bf7b9fba3924 53 #error "Master SSP device not defined!"
frank26080115 0:bf7b9fba3924 54 #endif
frank26080115 0:bf7b9fba3924 55
frank26080115 0:bf7b9fba3924 56 #if (USEDSSPDEV_S == 0)
frank26080115 0:bf7b9fba3924 57 #define SSPDEV_S LPC_SSP0
frank26080115 0:bf7b9fba3924 58 #elif (USEDSSPDEV_S == 1)
frank26080115 0:bf7b9fba3924 59 #define SSPDEV_S LPC_SSP1
frank26080115 0:bf7b9fba3924 60 #elif
frank26080115 0:bf7b9fba3924 61 #error "Slave SSP device not defined!"
frank26080115 0:bf7b9fba3924 62 #endif
frank26080115 0:bf7b9fba3924 63
frank26080115 0:bf7b9fba3924 64 /************************** PRIVATE VARIABLES *************************/
frank26080115 0:bf7b9fba3924 65 uint8_t menu1[] =
frank26080115 0:bf7b9fba3924 66 "********************************************************************************\n\r"
frank26080115 0:bf7b9fba3924 67 "Hello NXP Semiconductors \n\r"
frank26080115 0:bf7b9fba3924 68 "SSP demo \n\r"
frank26080115 0:bf7b9fba3924 69 "\t - MCU: LPC17xx \n\r"
frank26080115 0:bf7b9fba3924 70 "\t - Core: ARM Cortex-M3 \n\r"
frank26080115 0:bf7b9fba3924 71 "\t - Communicate via: UART0 - 115.200 kbps \n\r"
frank26080115 0:bf7b9fba3924 72 " This example uses two SSP peripherals in TI frame format \n\r"
frank26080115 0:bf7b9fba3924 73 " \t one is set as master mode and the other is set as slave mode. \n\r"
frank26080115 0:bf7b9fba3924 74 "\t The master and slave transfer a number of data bytes together \n\r"
frank26080115 0:bf7b9fba3924 75 "\t in interrupt mode \n\r"
frank26080115 0:bf7b9fba3924 76 "********************************************************************************\n\r";
frank26080115 0:bf7b9fba3924 77 uint8_t menu2[] = "Demo terminated! \n\r";
frank26080115 0:bf7b9fba3924 78
frank26080115 0:bf7b9fba3924 79 // SSP Configuration structure variable
frank26080115 0:bf7b9fba3924 80 SSP_CFG_Type SSP_ConfigStruct;
frank26080115 0:bf7b9fba3924 81
frank26080115 0:bf7b9fba3924 82 /* These variable below are used in Master SSP interrupt mode -------------------- */
frank26080115 0:bf7b9fba3924 83 /* Read data pointer */
frank26080115 0:bf7b9fba3924 84 uint8_t *pRdBuf_M;
frank26080115 0:bf7b9fba3924 85 /* Write data pointer */
frank26080115 0:bf7b9fba3924 86 uint8_t *pWrBuf_M;
frank26080115 0:bf7b9fba3924 87 /* Index of read data mode */
frank26080115 0:bf7b9fba3924 88 uint32_t RdIdx_M;
frank26080115 0:bf7b9fba3924 89 /* Index of write data mode */
frank26080115 0:bf7b9fba3924 90 uint32_t WrIdx_M;
frank26080115 0:bf7b9fba3924 91 /* Length of data */
frank26080115 0:bf7b9fba3924 92 uint32_t DatLen_M;
frank26080115 0:bf7b9fba3924 93 /* Status Flag indicates current SSP transmission complete or not */
frank26080115 0:bf7b9fba3924 94 __IO Bool complete_M;
frank26080115 0:bf7b9fba3924 95 /* Master Tx Buffer */
frank26080115 0:bf7b9fba3924 96 uint8_t Master_Tx_Buf[BUFFER_SIZE];
frank26080115 0:bf7b9fba3924 97 /* Master Rx Buffer */
frank26080115 0:bf7b9fba3924 98 uint8_t Master_Rx_Buf[BUFFER_SIZE];
frank26080115 0:bf7b9fba3924 99
frank26080115 0:bf7b9fba3924 100
frank26080115 0:bf7b9fba3924 101 /* These variable below are used in Slave SSP interrupt mode -------------------- */
frank26080115 0:bf7b9fba3924 102 /* Read data pointer */
frank26080115 0:bf7b9fba3924 103 uint8_t *pRdBuf_S;
frank26080115 0:bf7b9fba3924 104 /* Write data pointer */
frank26080115 0:bf7b9fba3924 105 uint8_t *pWrBuf_S;
frank26080115 0:bf7b9fba3924 106 /* Index of read data mode */
frank26080115 0:bf7b9fba3924 107 uint32_t RdIdx_S;
frank26080115 0:bf7b9fba3924 108 /* Index of write data mode */
frank26080115 0:bf7b9fba3924 109 uint32_t WrIdx_S;
frank26080115 0:bf7b9fba3924 110 /* Length of data */
frank26080115 0:bf7b9fba3924 111 uint32_t DatLen_S;
frank26080115 0:bf7b9fba3924 112 /* Status Flag indicates current SSP transmission complete or not */
frank26080115 0:bf7b9fba3924 113 __IO Bool complete_S;
frank26080115 0:bf7b9fba3924 114 /* Slave Tx Buffer */
frank26080115 0:bf7b9fba3924 115 uint8_t Slave_Tx_Buf[BUFFER_SIZE];
frank26080115 0:bf7b9fba3924 116 /* Slave Rx Buffer */
frank26080115 0:bf7b9fba3924 117 uint8_t Slave_Rx_Buf[BUFFER_SIZE];
frank26080115 0:bf7b9fba3924 118
frank26080115 0:bf7b9fba3924 119
frank26080115 0:bf7b9fba3924 120 /************************** PRIVATE FUNCTIONS *************************/
frank26080115 0:bf7b9fba3924 121 void SSP0_IRQHandler(void);
frank26080115 0:bf7b9fba3924 122 void SSP1_IRQHandler(void);
frank26080115 0:bf7b9fba3924 123 void ssp_Master_IntHandler(void);
frank26080115 0:bf7b9fba3924 124 void ssp_Slave_IntHandler(void);
frank26080115 0:bf7b9fba3924 125
frank26080115 0:bf7b9fba3924 126 int32_t ssp_MasterReadWrite (LPC_SSP_TypeDef *SSPx,
frank26080115 0:bf7b9fba3924 127 void *rbuffer,
frank26080115 0:bf7b9fba3924 128 void *wbuffer,
frank26080115 0:bf7b9fba3924 129 uint32_t length);
frank26080115 0:bf7b9fba3924 130 int32_t ssp_SlaveReadWrite (LPC_SSP_TypeDef *SSPx,
frank26080115 0:bf7b9fba3924 131 void *rbuffer,
frank26080115 0:bf7b9fba3924 132 void *wbuffer,
frank26080115 0:bf7b9fba3924 133 uint32_t length);
frank26080115 0:bf7b9fba3924 134 void print_menu(void);
frank26080115 0:bf7b9fba3924 135 void Buffer_Init(void);
frank26080115 0:bf7b9fba3924 136 void Buffer_Verify(void);
frank26080115 0:bf7b9fba3924 137 void Error_Loop(void);
frank26080115 0:bf7b9fba3924 138
frank26080115 0:bf7b9fba3924 139 /*----------------- INTERRUPT SERVICE ROUTINES --------------------------*/
frank26080115 0:bf7b9fba3924 140 /*********************************************************************//**
frank26080115 0:bf7b9fba3924 141 * @brief SSP Master Interrupt sub-routine used for reading
frank26080115 0:bf7b9fba3924 142 * and writing handler
frank26080115 0:bf7b9fba3924 143 * @param None
frank26080115 0:bf7b9fba3924 144 * @return None
frank26080115 0:bf7b9fba3924 145 ***********************************************************************/
frank26080115 0:bf7b9fba3924 146 void ssp_Master_IntHandler(void)
frank26080115 0:bf7b9fba3924 147 {
frank26080115 0:bf7b9fba3924 148 uint16_t tmp;
frank26080115 0:bf7b9fba3924 149
frank26080115 0:bf7b9fba3924 150 /* Clear all interrupt */
frank26080115 0:bf7b9fba3924 151 SSP_ClearIntPending(SSPDEV_M, SSP_INTCLR_ROR);
frank26080115 0:bf7b9fba3924 152 SSP_ClearIntPending(SSPDEV_M, SSP_INTCLR_RT);
frank26080115 0:bf7b9fba3924 153
frank26080115 0:bf7b9fba3924 154 /* check if RX FIFO contains data */
frank26080115 0:bf7b9fba3924 155 while (SSP_GetStatus(SSPDEV_M, SSP_STAT_RXFIFO_NOTEMPTY) == SET)
frank26080115 0:bf7b9fba3924 156 {
frank26080115 0:bf7b9fba3924 157 tmp = SSP_ReceiveData(SSPDEV_M);
frank26080115 0:bf7b9fba3924 158 if ((pRdBuf_M!= NULL) && (RdIdx_M < DatLen_M))
frank26080115 0:bf7b9fba3924 159 {
frank26080115 0:bf7b9fba3924 160 *(pRdBuf_M + RdIdx_M) = (uint8_t) tmp;
frank26080115 0:bf7b9fba3924 161 }
frank26080115 0:bf7b9fba3924 162 RdIdx_M++;
frank26080115 0:bf7b9fba3924 163 }
frank26080115 0:bf7b9fba3924 164
frank26080115 0:bf7b9fba3924 165 /* Check if TX FIFO is not full */
frank26080115 0:bf7b9fba3924 166 while ((SSP_GetStatus(SSPDEV_M, SSP_STAT_TXFIFO_NOTFULL) == SET)
frank26080115 0:bf7b9fba3924 167 && (WrIdx_M < DatLen_M))
frank26080115 0:bf7b9fba3924 168 {
frank26080115 0:bf7b9fba3924 169 /* check if RX FIFO contains data */
frank26080115 0:bf7b9fba3924 170 while (SSP_GetStatus(SSPDEV_M, SSP_STAT_RXFIFO_NOTEMPTY) == SET)
frank26080115 0:bf7b9fba3924 171 {
frank26080115 0:bf7b9fba3924 172 tmp = SSP_ReceiveData(SSPDEV_M);
frank26080115 0:bf7b9fba3924 173 if ((pRdBuf_M!= NULL) && (RdIdx_M < DatLen_M))
frank26080115 0:bf7b9fba3924 174 {
frank26080115 0:bf7b9fba3924 175 *(pRdBuf_M + RdIdx_M) = (uint8_t) tmp;
frank26080115 0:bf7b9fba3924 176 }
frank26080115 0:bf7b9fba3924 177 RdIdx_M++;
frank26080115 0:bf7b9fba3924 178 }
frank26080115 0:bf7b9fba3924 179
frank26080115 0:bf7b9fba3924 180 if (pWrBuf_M != NULL)
frank26080115 0:bf7b9fba3924 181 {
frank26080115 0:bf7b9fba3924 182 SSP_SendData(SSPDEV_M, (uint16_t)(*(pWrBuf_M + WrIdx_M)));
frank26080115 0:bf7b9fba3924 183 }
frank26080115 0:bf7b9fba3924 184 else
frank26080115 0:bf7b9fba3924 185 {
frank26080115 0:bf7b9fba3924 186 SSP_SendData(SSPDEV_M, IDLE_CHAR);
frank26080115 0:bf7b9fba3924 187 }
frank26080115 0:bf7b9fba3924 188 WrIdx_M++;
frank26080115 0:bf7b9fba3924 189 }
frank26080115 0:bf7b9fba3924 190
frank26080115 0:bf7b9fba3924 191 /* There're more data to send */
frank26080115 0:bf7b9fba3924 192 if (WrIdx_M < DatLen_M)
frank26080115 0:bf7b9fba3924 193 {
frank26080115 0:bf7b9fba3924 194 SSP_IntConfig(SSPDEV_M, SSP_INTCFG_TX, ENABLE);
frank26080115 0:bf7b9fba3924 195 }
frank26080115 0:bf7b9fba3924 196 /* Otherwise */
frank26080115 0:bf7b9fba3924 197 else
frank26080115 0:bf7b9fba3924 198 {
frank26080115 0:bf7b9fba3924 199 SSP_IntConfig(SSPDEV_M, SSP_INTCFG_TX, DISABLE);
frank26080115 0:bf7b9fba3924 200 }
frank26080115 0:bf7b9fba3924 201
frank26080115 0:bf7b9fba3924 202 /* There're more data to receive */
frank26080115 0:bf7b9fba3924 203 if (RdIdx_M < DatLen_M)
frank26080115 0:bf7b9fba3924 204 {
frank26080115 0:bf7b9fba3924 205 SSP_IntConfig(SSPDEV_M, SSP_INTCFG_ROR, ENABLE);
frank26080115 0:bf7b9fba3924 206 SSP_IntConfig(SSPDEV_M, SSP_INTCFG_RT, ENABLE);
frank26080115 0:bf7b9fba3924 207 SSP_IntConfig(SSPDEV_M, SSP_INTCFG_RX, ENABLE);
frank26080115 0:bf7b9fba3924 208 }
frank26080115 0:bf7b9fba3924 209 /* Otherwise */
frank26080115 0:bf7b9fba3924 210 else
frank26080115 0:bf7b9fba3924 211 {
frank26080115 0:bf7b9fba3924 212 SSP_IntConfig(SSPDEV_M, SSP_INTCFG_ROR, DISABLE);
frank26080115 0:bf7b9fba3924 213 SSP_IntConfig(SSPDEV_M, SSP_INTCFG_RT, DISABLE);
frank26080115 0:bf7b9fba3924 214 SSP_IntConfig(SSPDEV_M, SSP_INTCFG_RX, DISABLE);
frank26080115 0:bf7b9fba3924 215 }
frank26080115 0:bf7b9fba3924 216
frank26080115 0:bf7b9fba3924 217 /* Set Flag if both Read and Write completed */
frank26080115 0:bf7b9fba3924 218 if ((WrIdx_M == DatLen_M) && (RdIdx_M == DatLen_M))
frank26080115 0:bf7b9fba3924 219 {
frank26080115 0:bf7b9fba3924 220 complete_M = TRUE;
frank26080115 0:bf7b9fba3924 221 }
frank26080115 0:bf7b9fba3924 222 }
frank26080115 0:bf7b9fba3924 223
frank26080115 0:bf7b9fba3924 224
frank26080115 0:bf7b9fba3924 225
frank26080115 0:bf7b9fba3924 226 /*********************************************************************//**
frank26080115 0:bf7b9fba3924 227 * @brief SSP Slave Interrupt sub-routine used for reading
frank26080115 0:bf7b9fba3924 228 * and writing handler
frank26080115 0:bf7b9fba3924 229 * @param None
frank26080115 0:bf7b9fba3924 230 * @return None
frank26080115 0:bf7b9fba3924 231 ***********************************************************************/
frank26080115 0:bf7b9fba3924 232 void ssp_Slave_IntHandler(void)
frank26080115 0:bf7b9fba3924 233 {
frank26080115 0:bf7b9fba3924 234 uint16_t tmp;
frank26080115 0:bf7b9fba3924 235
frank26080115 0:bf7b9fba3924 236 /* Clear all interrupt */
frank26080115 0:bf7b9fba3924 237 SSP_ClearIntPending(SSPDEV_S, SSP_INTCLR_ROR);
frank26080115 0:bf7b9fba3924 238 SSP_ClearIntPending(SSPDEV_S, SSP_INTCLR_RT);
frank26080115 0:bf7b9fba3924 239
frank26080115 0:bf7b9fba3924 240 /* check if RX FIFO contains data */
frank26080115 0:bf7b9fba3924 241 while (SSP_GetStatus(SSPDEV_S, SSP_STAT_RXFIFO_NOTEMPTY) == SET)
frank26080115 0:bf7b9fba3924 242 {
frank26080115 0:bf7b9fba3924 243 tmp = SSP_ReceiveData(SSPDEV_S);
frank26080115 0:bf7b9fba3924 244 if ((pRdBuf_S!= NULL) && (RdIdx_S < DatLen_S))
frank26080115 0:bf7b9fba3924 245 {
frank26080115 0:bf7b9fba3924 246 *(pRdBuf_S + RdIdx_S) = (uint8_t) tmp;
frank26080115 0:bf7b9fba3924 247 }
frank26080115 0:bf7b9fba3924 248 RdIdx_S++;
frank26080115 0:bf7b9fba3924 249 }
frank26080115 0:bf7b9fba3924 250
frank26080115 0:bf7b9fba3924 251 /* Check if TX FIFO is not full */
frank26080115 0:bf7b9fba3924 252 while ((SSP_GetStatus(SSPDEV_S, SSP_STAT_TXFIFO_NOTFULL) == SET)
frank26080115 0:bf7b9fba3924 253 && (WrIdx_S < DatLen_S))
frank26080115 0:bf7b9fba3924 254 {
frank26080115 0:bf7b9fba3924 255 /* check if RX FIFO contains data */
frank26080115 0:bf7b9fba3924 256 while (SSP_GetStatus(SSPDEV_S, SSP_STAT_RXFIFO_NOTEMPTY) == SET)
frank26080115 0:bf7b9fba3924 257 {
frank26080115 0:bf7b9fba3924 258 tmp = SSP_ReceiveData(SSPDEV_S);
frank26080115 0:bf7b9fba3924 259 if ((pRdBuf_S!= NULL) && (RdIdx_S < DatLen_S))
frank26080115 0:bf7b9fba3924 260 {
frank26080115 0:bf7b9fba3924 261 *(pRdBuf_S + RdIdx_S) = (uint8_t) tmp;
frank26080115 0:bf7b9fba3924 262 }
frank26080115 0:bf7b9fba3924 263 RdIdx_S++;
frank26080115 0:bf7b9fba3924 264 }
frank26080115 0:bf7b9fba3924 265
frank26080115 0:bf7b9fba3924 266 if (pWrBuf_S != NULL)
frank26080115 0:bf7b9fba3924 267 {
frank26080115 0:bf7b9fba3924 268 SSP_SendData(SSPDEV_S, (uint16_t)(*(pWrBuf_S + WrIdx_S)));
frank26080115 0:bf7b9fba3924 269 }
frank26080115 0:bf7b9fba3924 270 else
frank26080115 0:bf7b9fba3924 271 {
frank26080115 0:bf7b9fba3924 272 SSP_SendData(SSPDEV_S, IDLE_CHAR);
frank26080115 0:bf7b9fba3924 273 }
frank26080115 0:bf7b9fba3924 274 WrIdx_S++;
frank26080115 0:bf7b9fba3924 275 }
frank26080115 0:bf7b9fba3924 276
frank26080115 0:bf7b9fba3924 277 /* There're more data to send */
frank26080115 0:bf7b9fba3924 278 if (WrIdx_S < DatLen_S)
frank26080115 0:bf7b9fba3924 279 {
frank26080115 0:bf7b9fba3924 280 SSP_IntConfig(SSPDEV_S, SSP_INTCFG_TX, ENABLE);
frank26080115 0:bf7b9fba3924 281 }
frank26080115 0:bf7b9fba3924 282 /* Otherwise */
frank26080115 0:bf7b9fba3924 283 else
frank26080115 0:bf7b9fba3924 284 {
frank26080115 0:bf7b9fba3924 285 SSP_IntConfig(SSPDEV_S, SSP_INTCFG_TX, DISABLE);
frank26080115 0:bf7b9fba3924 286 }
frank26080115 0:bf7b9fba3924 287
frank26080115 0:bf7b9fba3924 288 /* There're more data to receive */
frank26080115 0:bf7b9fba3924 289 if (RdIdx_S < DatLen_S)
frank26080115 0:bf7b9fba3924 290 {
frank26080115 0:bf7b9fba3924 291 SSP_IntConfig(SSPDEV_S, SSP_INTCFG_ROR, ENABLE);
frank26080115 0:bf7b9fba3924 292 SSP_IntConfig(SSPDEV_S, SSP_INTCFG_RT, ENABLE);
frank26080115 0:bf7b9fba3924 293 SSP_IntConfig(SSPDEV_S, SSP_INTCFG_RX, ENABLE);
frank26080115 0:bf7b9fba3924 294 }
frank26080115 0:bf7b9fba3924 295 /* Otherwise */
frank26080115 0:bf7b9fba3924 296 else
frank26080115 0:bf7b9fba3924 297 {
frank26080115 0:bf7b9fba3924 298 SSP_IntConfig(SSPDEV_S, SSP_INTCFG_ROR, DISABLE);
frank26080115 0:bf7b9fba3924 299 SSP_IntConfig(SSPDEV_S, SSP_INTCFG_RT, DISABLE);
frank26080115 0:bf7b9fba3924 300 SSP_IntConfig(SSPDEV_S, SSP_INTCFG_RX, DISABLE);
frank26080115 0:bf7b9fba3924 301 }
frank26080115 0:bf7b9fba3924 302
frank26080115 0:bf7b9fba3924 303 /* Set Flag if both Read and Write completed */
frank26080115 0:bf7b9fba3924 304 if ((WrIdx_S == DatLen_S) && (RdIdx_S == DatLen_S))
frank26080115 0:bf7b9fba3924 305 {
frank26080115 0:bf7b9fba3924 306 complete_S = TRUE;
frank26080115 0:bf7b9fba3924 307 }
frank26080115 0:bf7b9fba3924 308 }
frank26080115 0:bf7b9fba3924 309
frank26080115 0:bf7b9fba3924 310
frank26080115 0:bf7b9fba3924 311 /*********************************************************************//**
frank26080115 0:bf7b9fba3924 312 * @brief SSP0 Interrupt used for reading and writing handler
frank26080115 0:bf7b9fba3924 313 * @param None
frank26080115 0:bf7b9fba3924 314 * @return None
frank26080115 0:bf7b9fba3924 315 ***********************************************************************/
frank26080115 0:bf7b9fba3924 316 void SSP0_IRQHandler(void)
frank26080115 0:bf7b9fba3924 317 {
frank26080115 0:bf7b9fba3924 318 #if (USEDSSPDEV_M == 0)
frank26080115 0:bf7b9fba3924 319 ssp_Master_IntHandler();
frank26080115 0:bf7b9fba3924 320 #endif
frank26080115 0:bf7b9fba3924 321
frank26080115 0:bf7b9fba3924 322 #if (USEDSSPDEV_S == 0)
frank26080115 0:bf7b9fba3924 323 ssp_Slave_IntHandler();
frank26080115 0:bf7b9fba3924 324 #endif
frank26080115 0:bf7b9fba3924 325 }
frank26080115 0:bf7b9fba3924 326
frank26080115 0:bf7b9fba3924 327 /*********************************************************************//**
frank26080115 0:bf7b9fba3924 328 * @brief SSP1 Interrupt used for reading and writing handler
frank26080115 0:bf7b9fba3924 329 * @param None
frank26080115 0:bf7b9fba3924 330 * @return None
frank26080115 0:bf7b9fba3924 331 ***********************************************************************/
frank26080115 0:bf7b9fba3924 332 void SSP1_IRQHandler(void)
frank26080115 0:bf7b9fba3924 333 {
frank26080115 0:bf7b9fba3924 334 #if (USEDSSPDEV_M == 1)
frank26080115 0:bf7b9fba3924 335 ssp_Master_IntHandler();
frank26080115 0:bf7b9fba3924 336 #endif
frank26080115 0:bf7b9fba3924 337
frank26080115 0:bf7b9fba3924 338 #if (USEDSSPDEV_S == 1)
frank26080115 0:bf7b9fba3924 339 ssp_Slave_IntHandler();
frank26080115 0:bf7b9fba3924 340 #endif
frank26080115 0:bf7b9fba3924 341 }
frank26080115 0:bf7b9fba3924 342
frank26080115 0:bf7b9fba3924 343
frank26080115 0:bf7b9fba3924 344 /*-------------------------PRIVATE FUNCTIONS------------------------------*/
frank26080115 0:bf7b9fba3924 345 /*********************************************************************//**
frank26080115 0:bf7b9fba3924 346 * @brief SSP Read write in polling mode function (Master mode)
frank26080115 0:bf7b9fba3924 347 * @param[in] SSPdev: Pointer to SSP device
frank26080115 0:bf7b9fba3924 348 * @param[out] rbuffer: pointer to read buffer
frank26080115 0:bf7b9fba3924 349 * @param[in] wbuffer: pointer to write buffer
frank26080115 0:bf7b9fba3924 350 * @param[in] length: length of data to read and write
frank26080115 0:bf7b9fba3924 351 * @return 0 if there no data to send, otherwise return 1
frank26080115 0:bf7b9fba3924 352 ***********************************************************************/
frank26080115 0:bf7b9fba3924 353 int32_t ssp_MasterReadWrite (LPC_SSP_TypeDef *SSPx,
frank26080115 0:bf7b9fba3924 354 void *rbuffer,
frank26080115 0:bf7b9fba3924 355 void *wbuffer,
frank26080115 0:bf7b9fba3924 356 uint32_t length)
frank26080115 0:bf7b9fba3924 357 {
frank26080115 0:bf7b9fba3924 358 uint16_t tmp;
frank26080115 0:bf7b9fba3924 359 pRdBuf_M = (uint8_t *) rbuffer;
frank26080115 0:bf7b9fba3924 360 pWrBuf_M = (uint8_t *) wbuffer;
frank26080115 0:bf7b9fba3924 361 DatLen_M = length;
frank26080115 0:bf7b9fba3924 362 RdIdx_M = 0;
frank26080115 0:bf7b9fba3924 363 WrIdx_M = 0;
frank26080115 0:bf7b9fba3924 364
frank26080115 0:bf7b9fba3924 365 // wait for current SSP activity complete
frank26080115 0:bf7b9fba3924 366 while (SSP_GetStatus(SSPx, SSP_STAT_BUSY));
frank26080115 0:bf7b9fba3924 367
frank26080115 0:bf7b9fba3924 368 /* Clear all remaining data in RX FIFO */
frank26080115 0:bf7b9fba3924 369 while (SSP_GetStatus(SSPx, SSP_STAT_RXFIFO_NOTEMPTY))
frank26080115 0:bf7b9fba3924 370 {
frank26080115 0:bf7b9fba3924 371 tmp = SSP_ReceiveData(SSPx);
frank26080115 0:bf7b9fba3924 372 }
frank26080115 0:bf7b9fba3924 373
frank26080115 0:bf7b9fba3924 374 #if (USEDSSPDEV_M == 0)
frank26080115 0:bf7b9fba3924 375 if (length != 0)
frank26080115 0:bf7b9fba3924 376 {
frank26080115 0:bf7b9fba3924 377 SSP0_IRQHandler();
frank26080115 0:bf7b9fba3924 378 }
frank26080115 0:bf7b9fba3924 379 #endif
frank26080115 0:bf7b9fba3924 380 #if (USEDSSPDEV_M == 1)
frank26080115 0:bf7b9fba3924 381 if (length != 0)
frank26080115 0:bf7b9fba3924 382 {
frank26080115 0:bf7b9fba3924 383 SSP1_IRQHandler();
frank26080115 0:bf7b9fba3924 384 }
frank26080115 0:bf7b9fba3924 385 #endif
frank26080115 0:bf7b9fba3924 386
frank26080115 0:bf7b9fba3924 387 // Return 0
frank26080115 0:bf7b9fba3924 388 return 0;
frank26080115 0:bf7b9fba3924 389 }
frank26080115 0:bf7b9fba3924 390
frank26080115 0:bf7b9fba3924 391 /*********************************************************************//**
frank26080115 0:bf7b9fba3924 392 * @brief SSP Read write in polling mode function (Slave mode)
frank26080115 0:bf7b9fba3924 393 * @param[in] SSPdev: Pointer to SSP device
frank26080115 0:bf7b9fba3924 394 * @param[out] rbuffer: pointer to read buffer
frank26080115 0:bf7b9fba3924 395 * @param[in] wbuffer: pointer to write buffer
frank26080115 0:bf7b9fba3924 396 * @param[in] length: length of data to read and write
frank26080115 0:bf7b9fba3924 397 * @return 0 if there no data to send, otherwise return 1
frank26080115 0:bf7b9fba3924 398 ***********************************************************************/
frank26080115 0:bf7b9fba3924 399 int32_t ssp_SlaveReadWrite (LPC_SSP_TypeDef *SSPx,
frank26080115 0:bf7b9fba3924 400 void *rbuffer,
frank26080115 0:bf7b9fba3924 401 void *wbuffer,
frank26080115 0:bf7b9fba3924 402 uint32_t length)
frank26080115 0:bf7b9fba3924 403 {
frank26080115 0:bf7b9fba3924 404 uint16_t tmp;
frank26080115 0:bf7b9fba3924 405 pRdBuf_S = (uint8_t *) rbuffer;
frank26080115 0:bf7b9fba3924 406 pWrBuf_S = (uint8_t *) wbuffer;
frank26080115 0:bf7b9fba3924 407 DatLen_S = length;
frank26080115 0:bf7b9fba3924 408 RdIdx_S = 0;
frank26080115 0:bf7b9fba3924 409 WrIdx_S = 0;
frank26080115 0:bf7b9fba3924 410
frank26080115 0:bf7b9fba3924 411 // wait for current SSP activity complete
frank26080115 0:bf7b9fba3924 412 while (SSP_GetStatus(SSPx, SSP_STAT_BUSY))
frank26080115 0:bf7b9fba3924 413 {
frank26080115 0:bf7b9fba3924 414 tmp = SSP_ReceiveData(SSPx);
frank26080115 0:bf7b9fba3924 415 }
frank26080115 0:bf7b9fba3924 416
frank26080115 0:bf7b9fba3924 417 /* Clear all remaining data in RX FIFO */
frank26080115 0:bf7b9fba3924 418 while (SSP_GetStatus(SSPx, SSP_STAT_RXFIFO_NOTEMPTY))
frank26080115 0:bf7b9fba3924 419 {
frank26080115 0:bf7b9fba3924 420 tmp = SSP_ReceiveData(SSPx);
frank26080115 0:bf7b9fba3924 421 }
frank26080115 0:bf7b9fba3924 422 #if (USEDSSPDEV_S == 0)
frank26080115 0:bf7b9fba3924 423 if (length != 0)
frank26080115 0:bf7b9fba3924 424 {
frank26080115 0:bf7b9fba3924 425 SSP0_IRQHandler();
frank26080115 0:bf7b9fba3924 426 }
frank26080115 0:bf7b9fba3924 427 #endif
frank26080115 0:bf7b9fba3924 428 #if (USEDSSPDEV_S == 1)
frank26080115 0:bf7b9fba3924 429 if (length != 0)
frank26080115 0:bf7b9fba3924 430 {
frank26080115 0:bf7b9fba3924 431 SSP1_IRQHandler();
frank26080115 0:bf7b9fba3924 432 }
frank26080115 0:bf7b9fba3924 433 #endif
frank26080115 0:bf7b9fba3924 434
frank26080115 0:bf7b9fba3924 435 // Return 0
frank26080115 0:bf7b9fba3924 436 return 0;
frank26080115 0:bf7b9fba3924 437 }
frank26080115 0:bf7b9fba3924 438
frank26080115 0:bf7b9fba3924 439
frank26080115 0:bf7b9fba3924 440 /*********************************************************************//**
frank26080115 0:bf7b9fba3924 441 * @brief Initialize buffer
frank26080115 0:bf7b9fba3924 442 * @param[in] None
frank26080115 0:bf7b9fba3924 443 * @return None
frank26080115 0:bf7b9fba3924 444 **********************************************************************/
frank26080115 0:bf7b9fba3924 445 void Buffer_Init(void)
frank26080115 0:bf7b9fba3924 446 {
frank26080115 0:bf7b9fba3924 447 uint8_t i;
frank26080115 0:bf7b9fba3924 448
frank26080115 0:bf7b9fba3924 449 for (i = 0; i < BUFFER_SIZE; i++) {
frank26080115 0:bf7b9fba3924 450 Master_Tx_Buf[i] = i;
frank26080115 0:bf7b9fba3924 451 Slave_Tx_Buf[i] = i;
frank26080115 0:bf7b9fba3924 452 Master_Rx_Buf[i] = 0;
frank26080115 0:bf7b9fba3924 453 Slave_Rx_Buf[i] = 0;
frank26080115 0:bf7b9fba3924 454 }
frank26080115 0:bf7b9fba3924 455
frank26080115 0:bf7b9fba3924 456 }
frank26080115 0:bf7b9fba3924 457
frank26080115 0:bf7b9fba3924 458 /*********************************************************************//**
frank26080115 0:bf7b9fba3924 459 * @brief Verify buffer
frank26080115 0:bf7b9fba3924 460 * @param[in] none
frank26080115 0:bf7b9fba3924 461 * @return None
frank26080115 0:bf7b9fba3924 462 **********************************************************************/
frank26080115 0:bf7b9fba3924 463 void Buffer_Verify(void)
frank26080115 0:bf7b9fba3924 464 {
frank26080115 0:bf7b9fba3924 465 uint8_t i;
frank26080115 0:bf7b9fba3924 466 uint8_t *pMTx = (uint8_t *) &Master_Tx_Buf[0];
frank26080115 0:bf7b9fba3924 467 uint8_t *pSTx = (uint8_t *) &Slave_Tx_Buf[0];
frank26080115 0:bf7b9fba3924 468 uint8_t *pMRx = (uint8_t *) &Master_Rx_Buf[0];
frank26080115 0:bf7b9fba3924 469 uint8_t *pSRx = (uint8_t *) &Slave_Rx_Buf[0];
frank26080115 0:bf7b9fba3924 470
frank26080115 0:bf7b9fba3924 471 for ( i = 0; i < BUFFER_SIZE; i++ )
frank26080115 0:bf7b9fba3924 472 {
frank26080115 0:bf7b9fba3924 473 if ((*pSRx++ != *pMTx++) || (*pMRx++ != *pSTx++))
frank26080115 0:bf7b9fba3924 474 {
frank26080115 0:bf7b9fba3924 475 /* Call Error Loop */
frank26080115 0:bf7b9fba3924 476 Error_Loop();
frank26080115 0:bf7b9fba3924 477 }
frank26080115 0:bf7b9fba3924 478 }
frank26080115 0:bf7b9fba3924 479 }
frank26080115 0:bf7b9fba3924 480
frank26080115 0:bf7b9fba3924 481 /*********************************************************************//**
frank26080115 0:bf7b9fba3924 482 * @brief Error Loop (called by Buffer_Verify() if any error)
frank26080115 0:bf7b9fba3924 483 * @param[in] none
frank26080115 0:bf7b9fba3924 484 * @return None
frank26080115 0:bf7b9fba3924 485 **********************************************************************/
frank26080115 0:bf7b9fba3924 486 void Error_Loop(void)
frank26080115 0:bf7b9fba3924 487 {
frank26080115 0:bf7b9fba3924 488 /* Loop forever */
frank26080115 0:bf7b9fba3924 489 _DBG_("Verify fail!\n\r");
frank26080115 0:bf7b9fba3924 490 while (1);
frank26080115 0:bf7b9fba3924 491 }
frank26080115 0:bf7b9fba3924 492
frank26080115 0:bf7b9fba3924 493
frank26080115 0:bf7b9fba3924 494 /*********************************************************************//**
frank26080115 0:bf7b9fba3924 495 * @brief Print Welcome menu
frank26080115 0:bf7b9fba3924 496 * @param[in] none
frank26080115 0:bf7b9fba3924 497 * @return None
frank26080115 0:bf7b9fba3924 498 **********************************************************************/
frank26080115 0:bf7b9fba3924 499 void print_menu(void)
frank26080115 0:bf7b9fba3924 500 {
frank26080115 0:bf7b9fba3924 501 _DBG(menu1);
frank26080115 0:bf7b9fba3924 502 }
frank26080115 0:bf7b9fba3924 503
frank26080115 0:bf7b9fba3924 504
frank26080115 0:bf7b9fba3924 505 /*-------------------------MAIN FUNCTION------------------------------*/
frank26080115 0:bf7b9fba3924 506 /*********************************************************************//**
frank26080115 0:bf7b9fba3924 507 * @brief c_entry: Main TI program body
frank26080115 0:bf7b9fba3924 508 * @param[in] None
frank26080115 0:bf7b9fba3924 509 * @return int
frank26080115 0:bf7b9fba3924 510 **********************************************************************/
frank26080115 0:bf7b9fba3924 511 int c_entry(void)
frank26080115 0:bf7b9fba3924 512 {
frank26080115 0:bf7b9fba3924 513 PINSEL_CFG_Type PinCfg;
frank26080115 0:bf7b9fba3924 514
frank26080115 0:bf7b9fba3924 515 /* Initialize debug via UART0
frank26080115 0:bf7b9fba3924 516 * – 115200bps
frank26080115 0:bf7b9fba3924 517 * – 8 data bit
frank26080115 0:bf7b9fba3924 518 * – No parity
frank26080115 0:bf7b9fba3924 519 * – 1 stop bit
frank26080115 0:bf7b9fba3924 520 * – No flow control
frank26080115 0:bf7b9fba3924 521 */
frank26080115 0:bf7b9fba3924 522 debug_frmwrk_init();
frank26080115 0:bf7b9fba3924 523
frank26080115 0:bf7b9fba3924 524 // print welcome screen
frank26080115 0:bf7b9fba3924 525 print_menu();
frank26080115 0:bf7b9fba3924 526
frank26080115 0:bf7b9fba3924 527 /*
frank26080115 0:bf7b9fba3924 528 * Initialize SSP pin connect
frank26080115 0:bf7b9fba3924 529 * P0.6 - SSEL1
frank26080115 0:bf7b9fba3924 530 * P0.7 - SCK1
frank26080115 0:bf7b9fba3924 531 * P0.8 - MISO1
frank26080115 0:bf7b9fba3924 532 * P0.9 - MOSI1
frank26080115 0:bf7b9fba3924 533 */
frank26080115 0:bf7b9fba3924 534 PinCfg.Funcnum = 2;
frank26080115 0:bf7b9fba3924 535 PinCfg.OpenDrain = 0;
frank26080115 0:bf7b9fba3924 536 PinCfg.Pinmode = 0;
frank26080115 0:bf7b9fba3924 537 PinCfg.Portnum = 0;
frank26080115 0:bf7b9fba3924 538 PinCfg.Pinnum = 6;
frank26080115 0:bf7b9fba3924 539 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 540 PinCfg.Pinnum = 7;
frank26080115 0:bf7b9fba3924 541 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 542 PinCfg.Pinnum = 8;
frank26080115 0:bf7b9fba3924 543 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 544 PinCfg.Pinnum = 9;
frank26080115 0:bf7b9fba3924 545 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 546
frank26080115 0:bf7b9fba3924 547
frank26080115 0:bf7b9fba3924 548 /*
frank26080115 0:bf7b9fba3924 549 * Initialize SSP pin connect
frank26080115 0:bf7b9fba3924 550 * P0.15 - SCK
frank26080115 0:bf7b9fba3924 551 * P0.16 - SSEL
frank26080115 0:bf7b9fba3924 552 * P0.17 - MISO
frank26080115 0:bf7b9fba3924 553 * P0.18 - MOSI
frank26080115 0:bf7b9fba3924 554 */
frank26080115 0:bf7b9fba3924 555 PinCfg.Funcnum = 2;
frank26080115 0:bf7b9fba3924 556 PinCfg.OpenDrain = 0;
frank26080115 0:bf7b9fba3924 557 PinCfg.Pinmode = 0;
frank26080115 0:bf7b9fba3924 558 PinCfg.Portnum = 0;
frank26080115 0:bf7b9fba3924 559 PinCfg.Pinnum = 15;
frank26080115 0:bf7b9fba3924 560 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 561 PinCfg.Pinnum = 17;
frank26080115 0:bf7b9fba3924 562 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 563 PinCfg.Pinnum = 18;
frank26080115 0:bf7b9fba3924 564 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 565 PinCfg.Pinnum = 16;
frank26080115 0:bf7b9fba3924 566 PINSEL_ConfigPin(&PinCfg);
frank26080115 0:bf7b9fba3924 567
frank26080115 0:bf7b9fba3924 568 /* Initializing Master SSP device section ------------------------------------------- */
frank26080115 0:bf7b9fba3924 569 // initialize SSP configuration structure to default
frank26080115 0:bf7b9fba3924 570 SSP_ConfigStructInit(&SSP_ConfigStruct);
frank26080115 0:bf7b9fba3924 571 // Re-configure SSP to TI frame format
frank26080115 0:bf7b9fba3924 572 SSP_ConfigStruct.FrameFormat = SSP_FRAME_TI;
frank26080115 0:bf7b9fba3924 573 // Initialize SSP peripheral with parameter given in structure above
frank26080115 0:bf7b9fba3924 574 SSP_Init(SSPDEV_M, &SSP_ConfigStruct);
frank26080115 0:bf7b9fba3924 575
frank26080115 0:bf7b9fba3924 576 // Enable SSP peripheral
frank26080115 0:bf7b9fba3924 577 SSP_Cmd(SSPDEV_M, ENABLE);
frank26080115 0:bf7b9fba3924 578
frank26080115 0:bf7b9fba3924 579
frank26080115 0:bf7b9fba3924 580 /* Initializing Slave SSP device section ------------------------------------------- */
frank26080115 0:bf7b9fba3924 581 // initialize SSP configuration structure to default
frank26080115 0:bf7b9fba3924 582 SSP_ConfigStructInit(&SSP_ConfigStruct);
frank26080115 0:bf7b9fba3924 583 /* Re-configure mode for SSP device */
frank26080115 0:bf7b9fba3924 584 SSP_ConfigStruct.Mode = SSP_SLAVE_MODE;
frank26080115 0:bf7b9fba3924 585 // Re-configure SSP to TI frame format
frank26080115 0:bf7b9fba3924 586 SSP_ConfigStruct.FrameFormat = SSP_FRAME_TI;
frank26080115 0:bf7b9fba3924 587 // Initialize SSP peripheral with parameter given in structure above
frank26080115 0:bf7b9fba3924 588 SSP_Init(SSPDEV_S, &SSP_ConfigStruct);
frank26080115 0:bf7b9fba3924 589
frank26080115 0:bf7b9fba3924 590 // Enable SSP peripheral
frank26080115 0:bf7b9fba3924 591 SSP_Cmd(SSPDEV_S, ENABLE);
frank26080115 0:bf7b9fba3924 592
frank26080115 0:bf7b9fba3924 593 /* Interrupt configuration section ------------------------------------------------- */
frank26080115 0:bf7b9fba3924 594 #if ((USEDSSPDEV_S == 0) || (USEDSSPDEV_M == 0))
frank26080115 0:bf7b9fba3924 595 /* preemption = 1, sub-priority = 1 */
frank26080115 0:bf7b9fba3924 596 NVIC_SetPriority(SSP0_IRQn, ((0x01<<3)|0x01));
frank26080115 0:bf7b9fba3924 597 /* Enable SSP0 interrupt */
frank26080115 0:bf7b9fba3924 598 NVIC_EnableIRQ(SSP0_IRQn);
frank26080115 0:bf7b9fba3924 599 #endif
frank26080115 0:bf7b9fba3924 600 #if ((USEDSSPDEV_S == 1) || (USEDSSPDEV_M == 1))
frank26080115 0:bf7b9fba3924 601 /* preemption = 1, sub-priority = 1 */
frank26080115 0:bf7b9fba3924 602 NVIC_SetPriority(SSP1_IRQn, ((0x01<<3)|0x01));
frank26080115 0:bf7b9fba3924 603 /* Enable SSP0 interrupt */
frank26080115 0:bf7b9fba3924 604 NVIC_EnableIRQ(SSP1_IRQn);
frank26080115 0:bf7b9fba3924 605 #endif
frank26080115 0:bf7b9fba3924 606
frank26080115 0:bf7b9fba3924 607 /* Initializing Buffer section ------------------------------------------------- */
frank26080115 0:bf7b9fba3924 608 Buffer_Init();
frank26080115 0:bf7b9fba3924 609
frank26080115 0:bf7b9fba3924 610 /* Start Transmit/Receive between Master and Slave ----------------------------- */
frank26080115 0:bf7b9fba3924 611 complete_S = FALSE;
frank26080115 0:bf7b9fba3924 612 complete_M = FALSE;
frank26080115 0:bf7b9fba3924 613
frank26080115 0:bf7b9fba3924 614 /* Slave must be ready first */
frank26080115 0:bf7b9fba3924 615 ssp_SlaveReadWrite(SSPDEV_S, Slave_Rx_Buf, Slave_Tx_Buf, BUFFER_SIZE);
frank26080115 0:bf7b9fba3924 616 /* Then Master can start its transferring */
frank26080115 0:bf7b9fba3924 617 ssp_MasterReadWrite(SSPDEV_M, Master_Rx_Buf, Master_Tx_Buf, BUFFER_SIZE);
frank26080115 0:bf7b9fba3924 618
frank26080115 0:bf7b9fba3924 619 /* Wait for complete */
frank26080115 0:bf7b9fba3924 620 while ((complete_S == FALSE) || (complete_M == FALSE));
frank26080115 0:bf7b9fba3924 621
frank26080115 0:bf7b9fba3924 622 /* Verify buffer */
frank26080115 0:bf7b9fba3924 623 Buffer_Verify();
frank26080115 0:bf7b9fba3924 624
frank26080115 0:bf7b9fba3924 625 _DBG_("Verify success!\n\r");
frank26080115 0:bf7b9fba3924 626 /* Loop forever */
frank26080115 0:bf7b9fba3924 627 while(1);
frank26080115 0:bf7b9fba3924 628 return 1;
frank26080115 0:bf7b9fba3924 629 }
frank26080115 0:bf7b9fba3924 630
frank26080115 0:bf7b9fba3924 631 /* With ARM and GHS toolsets, the entry point is main() - this will
frank26080115 0:bf7b9fba3924 632 allow the linker to generate wrapper code to setup stacks, allocate
frank26080115 0:bf7b9fba3924 633 heap area, and initialize and copy code and data segments. For GNU
frank26080115 0:bf7b9fba3924 634 toolsets, the entry point is through __start() in the crt0_gnu.asm
frank26080115 0:bf7b9fba3924 635 file, and that startup code will setup stacks and data */
frank26080115 0:bf7b9fba3924 636 int main(void)
frank26080115 0:bf7b9fba3924 637 {
frank26080115 0:bf7b9fba3924 638 return c_entry();
frank26080115 0:bf7b9fba3924 639 }
frank26080115 0:bf7b9fba3924 640
frank26080115 0:bf7b9fba3924 641
frank26080115 0:bf7b9fba3924 642 #ifdef DEBUG
frank26080115 0:bf7b9fba3924 643 /*******************************************************************************
frank26080115 0:bf7b9fba3924 644 * @brief Reports the name of the source file and the source line number
frank26080115 0:bf7b9fba3924 645 * where the CHECK_PARAM error has occurred.
frank26080115 0:bf7b9fba3924 646 * @param[in] file Pointer to the source file name
frank26080115 0:bf7b9fba3924 647 * @param[in] line assert_param error line source number
frank26080115 0:bf7b9fba3924 648 * @return None
frank26080115 0:bf7b9fba3924 649 *******************************************************************************/
frank26080115 0:bf7b9fba3924 650 void check_failed(uint8_t *file, uint32_t line)
frank26080115 0:bf7b9fba3924 651 {
frank26080115 0:bf7b9fba3924 652 /* User can add his own implementation to report the file name and line number,
frank26080115 0:bf7b9fba3924 653 ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
frank26080115 0:bf7b9fba3924 654
frank26080115 0:bf7b9fba3924 655 /* Infinite loop */
frank26080115 0:bf7b9fba3924 656 while(1);
frank26080115 0:bf7b9fba3924 657 }
frank26080115 0:bf7b9fba3924 658 #endif
frank26080115 0:bf7b9fba3924 659
frank26080115 0:bf7b9fba3924 660 /*
frank26080115 0:bf7b9fba3924 661 * @}
frank26080115 0:bf7b9fba3924 662 */