static void init_ssp(void) { SSP_CFG_Type SSP_ConfigStruct; PINSEL_CFG_Type PinCfg; /* * Initialize SPI pin connect * P0.7 - SCK; * P0.8 - MISO * P0.9 - MOSI * P2.2 - SSEL - used as GPIO */ PinCfg.Funcnum = 2; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 0; PinCfg.Pinnum = 7; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 8; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 9; PINSEL_ConfigPin(&PinCfg); PinCfg.Funcnum = 0; PinCfg.Portnum = 2; PinCfg.Pinnum = 2; PINSEL_ConfigPin(&PinCfg); SSP_ConfigStructInit(&SSP_ConfigStruct); // Initialize SSP peripheral with parameter given in structure above SSP_Init(LPC_SSP1, &SSP_ConfigStruct); // Enable SSP peripheral SSP_Cmd(LPC_SSP1, ENABLE); }
void ads7843_init(void) { SSP_CFG_Type SSP_ConfigStruct; CONFIG_TS_PENIRQ; scu_pinmux(0x3,3,MD_PLN_FAST,FUNC2); // P3.3 connected to SCL/SCLK func2=SSP0 SCK0 // scu_pinmux(0x9,0,MD_PLN_FAST,FUNC7); // P9.0 connected to nCS func2=SSP0 SSEL0 scu_pinmux(0x9,0,MD_PLN_FAST | MD_EZI,FUNC0); GPIO_SetDir(4,1<<12,1); scu_pinmux(0x3,6,MD_PLN_FAST | MD_EZI,FUNC5); // P3.6 connected to SO func2=SSP0 MISO0 GPIO_SetDir(0,1<<6,0); scu_pinmux(0x3,7,MD_PLN_FAST ,FUNC5); // P3.7 connected to nSI func2=SSP0 MOSI0 // initialize SSP configuration structure to default SSP_ConfigStructInit(&SSP_ConfigStruct); SSP_ConfigStruct.ClockRate = 100000; SSP_ConfigStruct.Databit = SSP_DATABIT_8; // Initialize SSP peripheral with parameter given in structure above SSP_Init(LPC_SSP0, &SSP_ConfigStruct); // Enable SSP peripheral SSP_Cmd(LPC_SSP0, ENABLE); }
/******************************************************************************* * Function Name : TP_Init * Description : TSC2046 Initialization * Input : None * Output : None * Return : None * Attention : None *******************************************************************************/ void TP_Init(void) { SSP_CFG_Type SSP_ConfigStruct; /* * Initialize SPI pin connect * P2.23 - TP_CS - used as GPIO * P2.22 - SCK * P2.26 - MISO * P2.27 - MOSI */ PINSEL_ConfigPin(2, 23, 0); PINSEL_ConfigPin(2, 22, 2); PINSEL_ConfigPin(2, 26, 2); PINSEL_ConfigPin(2, 27, 2); /* P0.16 CS is output */ GPIO_SetDir(TP_CS_PORT_NUM, (1<<TP_CS_PIN_NUM), 1); GPIO_SetValue(TP_CS_PORT_NUM, (1<<TP_CS_PIN_NUM)); PINSEL_ConfigPin(2, 11, 0); GPIO_SetDir(2, (1<<11), 0); /* P2.11 TP_INT is input */ /* initialize SSP configuration structure to default */ SSP_ConfigStructInit(&SSP_ConfigStruct); SSP_ConfigStruct.ClockRate = 250000; SSP_ConfigStruct.CPHA = SSP_CPHA_FIRST; //SSP_CPHA_SECOND SSP_CPHA_FIRST SSP_ConfigStruct.CPOL = SSP_CPOL_HI; //SSP_CPOL_LO SSP_CPOL_HI /* Initialize SSP peripheral with parameter given in structure above */ SSP_Init(LPC_SSP0, &SSP_ConfigStruct); /* Enable SSP peripheral */ SSP_Cmd(LPC_SSP0, ENABLE); }
/******************************************************************************* * Function Name : Lcd_Configuration * Description : Configures LCD Control lines * Input : None * Output : None * Return : None * Attention : None *******************************************************************************/ static void LCD_Configuration(void) { PINSEL_CFG_Type PinCfg; SSP_CFG_Type SSP_ConfigStruct; /* * Initialize SPI pin connect * P0.15 - LCD_CSB - used as GPIO * P0.16 - LCD_SCK * P0.17 - LCD_MISO * P0.18 - LCD_MOSI */ PinCfg.Funcnum = 2; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 0; PinCfg.Pinnum = 15; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 17; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 18; PINSEL_ConfigPin(&PinCfg); PinCfg.Funcnum = 0; PinCfg.Portnum = 0; PinCfg.Pinnum = 16; PINSEL_ConfigPin(&PinCfg); /* P1.31 LCD_CSB is output */ GPIO_SetDir(CSB_PORT_NUM, ( (uint32_t) 1 << CSB_PIN_NUM ), 1); GPIO_SetValue(CSB_PORT_NUM, ( (uint32_t) 1 << CSB_PIN_NUM ) ); /* initialize SSP configuration structure to default */ SSP_ConfigStructInit(&SSP_ConfigStruct); SSP_ConfigStruct.CPHA = SSP_CPHA_SECOND; SSP_ConfigStruct.CPOL = SSP_CPOL_LO; SSP_ConfigStruct.ClockRate = 34000000; /* Initialize SSP peripheral with parameter given in structure above */ SSP_Init(LPC_SSP0, &SSP_ConfigStruct); /* Enable SSP peripheral */ SSP_Cmd(LPC_SSP0, ENABLE); }
int main(void) { volatile int timeKeeper=0; unsigned char i=0; SSP_CFG_Type sspChannelConfig; SSP_DATA_SETUP_Type sspDataConfig; uint8_t rxBuff[5]; uint8_t txBuff[5]; LPC_PINCON->PINSEL0 |= 0x2<<14; //SCK1 LPC_PINCON->PINSEL0 |= 0x2<<18; //MOSI1 PORT_CS->FIODIR |= 1<<2; //P2.2 as CSn sspDataConfig.length = 1; sspDataConfig.tx_data = txBuff; sspDataConfig.rx_data = rxBuff; SSP_ConfigStructInit(&sspChannelConfig); SSP_Init(SSP_CHANNEL, &sspChannelConfig); SSP_Cmd(SSP_CHANNEL, ENABLE); while(1) { if (timeKeeper++ % 500000 == 0) { PORT_CS->FIOCLR |= PIN_MASK_CS; //CS low txBuff[0] = segmentLUT[i++]; //Buffer next numeral //Only display 0-9 if (i==10) i=0; //Transfer to 7-Segment Display Driver SSP_ReadWrite(SSP_CHANNEL, &sspDataConfig, SSP_TRANSFER_POLLING); PORT_CS->FIOSET |= PIN_MASK_CS; //CS High } } return 0 ; }
/******************************************************************************* * Function Name : SPI_FLASH_Init * Description : SPI FLASH Configuration * Input : None * Output : None * Return : None * Attention : None *******************************************************************************/ void SPI_FLASH_RTC_Init(void) { SSP_CFG_Type SSP_ConfigStruct; /* * Initialize SPI pin connect * P2.19 - SSEL - used as GPIO * P2.22 - SCK * P2.26 - MISO * P2.27 - MOSI */ PINSEL_ConfigPin(FLASH_CS_PORT_NUM, FLASH_CS_PIN_NUM, 0); /* P2.19 - GPIO */ // PINSEL_ConfigPin(RTC_CS_PORT_NUM, RTC_CS_PIN_NUM, 0); /* P2.21 - GPIO */ PINSEL_ConfigPin(RTC_FLASH_MOSI_PORT_NUM, RTC_FLASH_MOSI_PIN_NUM, RTC_FLASH_MOSI_FUN_NUM); /* SSP0_SCK */ PINSEL_ConfigPin(RTC_FLASH_MISO_PORT_NUM, RTC_FLASH_MISO_PIN_NUM, RTC_FLASH_MISO_FUN_NUM); /* SSP0_MISO */ PINSEL_ConfigPin(RTC_FLASH_SCK_PORT_NUM, RTC_FLASH_SCK_PIN_NUM, RTC_FLASH_SCK_FUN_NUM); /* SSP0_MOSI */ PINSEL_SetPinMode(RTC_FLASH_MOSI_PORT_NUM,RTC_FLASH_MOSI_PIN_NUM,IOCON_MODE_PULLUP); PINSEL_SetPinMode(RTC_FLASH_MISO_PORT_NUM,RTC_FLASH_MISO_PIN_NUM,IOCON_MODE_PLAIN); /* P2.19 CS is output */ GPIO_SetDir(FLASH_CS_PORT_NUM, (1<<FLASH_CS_PIN_NUM), 1); SPI_FLASH_CS_HIGH(); /* P2.21 CS is output */ // GPIO_SetDir(RTC_CS_PORT_NUM, (1<<RTC_CS_PIN_NUM), 1); // SPI_RTC_CS_HIGH(); /* initialize SSP configuration structure to default */ SSP_ConfigStructInit(&SSP_ConfigStruct); SSP_ConfigStruct.CPHA = SSP_CPHA_FIRST; SSP_ConfigStruct.CPOL = SSP_CPOL_HI; //SSP_ConfigStruct.FrameFormat = SSP_FRAME_TI; //SSP_ConfigStruct.Databit = SSP_DATABIT_8; /* Initialize SSP peripheral with parameter given in structure above */ SSP_ConfigStruct.ClockRate = 3000000; //SSP_ConfigStruct.Mode = SSP_MASTER_MODE; SSP_Init(RTC_FLASH_SSP, &SSP_ConfigStruct); /* Enable SSP peripheral */ SSP_Cmd(RTC_FLASH_SSP, ENABLE); }
void ssp_spi_init(){ SSP_CFG_Type SSP_ConfigStruct; PINSEL_CFG_Type PinCfg; SSP_ConfigStructInit(&SSP_ConfigStruct); /* * Initialize SPI pin connect * P0.7 - SCK; * P0.6 - SSEL * P0.8 - MISO * P0.9 - MOSI */ PinCfg.Funcnum = 2; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 0; PinCfg.Pinnum = 7; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 8; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 9; PINSEL_ConfigPin(&PinCfg); LPC_PINCON->PINSEL0 &= ~(0x3<<12); // [P0.6] SSEL1 as GPIO. auto ssp does not work because it toggles cs between bytes. LPC_GPIO0->FIODIR |= (1 << SPI_SCK_PIN) | (1 << SPI_MOSI_PIN) | (1 << SPI_SSEL_PIN); LPC_GPIO0->FIODIR &= ~(1 << SPI_MISO_PIN); LPC_GPIO0->FIOSET |= PIN_MASK_CS; // - set high SSP_Init(LPC_SSP1,&SSP_ConfigStruct); SSP_Cmd(LPC_SSP1, ENABLE); }
/*********************************************************************//** * @brief Main SSP program body **********************************************************************/ int c_entry(void) { GPDMA_Channel_CFG_Type GPDMACfg; PINSEL_CFG_Type PinCfg; // DeInit NVIC and SCBNVIC NVIC_DeInit(); NVIC_SCBDeInit(); /* Configure the NVIC Preemption Priority Bits: * two (2) bits of preemption priority, six (6) bits of sub-priority. * Since the Number of Bits used for Priority Levels is five (5), so the * actual bit number of sub-priority is three (3) */ NVIC_SetPriorityGrouping(0x05); // Set Vector table offset value #if (__RAM_MODE__==1) NVIC_SetVTOR(0x10000000); #else NVIC_SetVTOR(0x00000000); #endif /* * Initialize SPI pin connect * P0.15 - SCK; * P0.16 - SSEL * P0.17 - MISO * P0.18 - MOSI */ PinCfg.Funcnum = 2; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 0; PinCfg.Pinnum = 15; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 17; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 18; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 16; PINSEL_ConfigPin(&PinCfg); /* * Initialize debug via UART */ debug_frmwrk_init(); // print welcome screen print_menu(); /* Initializing SSP device section ------------------------------------------------------ */ // initialize SSP configuration structure to default SSP_ConfigStructInit(&SSP_ConfigStruct); // Initialize SSP peripheral with parameter given in structure above SSP_Init(LPC_SSP0, &SSP_ConfigStruct); // Enable SSP peripheral SSP_Cmd(LPC_SSP0, ENABLE); /* GPDMA Interrupt configuration section ------------------------------------------------- */ /* preemption = 1, sub-priority = 1 */ NVIC_SetPriority(DMA_IRQn, ((0x01<<3)|0x01)); /* Enable SSP0 interrupt */ NVIC_EnableIRQ(DMA_IRQn); /* Initializing Buffer section ----------------------------------------------------------- */ Buffer_Init(); /* Initialize GPDMA controller */ GPDMA_Init(); /* Setting GPDMA interrupt */ // Disable interrupt for DMA NVIC_DisableIRQ (DMA_IRQn); /* preemption = 1, sub-priority = 1 */ NVIC_SetPriority(DMA_IRQn, ((0x01<<3)|0x01)); /* Configure GPDMA channel 0 -------------------------------------------------------------*/ /* DMA Channel 0 */ GPDMACfg.ChannelNum = 0; // Source memory GPDMACfg.SrcMemAddr = (uint32_t) &dma_src; // Destination memory - Not used GPDMACfg.DstMemAddr = 0; // Transfer size GPDMACfg.TransferSize = sizeof(dma_src); // Transfer width - not used GPDMACfg.TransferWidth = 0; // Transfer type GPDMACfg.TransferType = GPDMA_TRANSFERTYPE_M2P; // Source connection - unused GPDMACfg.SrcConn = 0; // Destination connection GPDMACfg.DstConn = GPDMA_CONN_SSP0_Tx; // Linker List Item - unused GPDMACfg.DMALLI = 0; // Setup channel with given parameter GPDMA_Setup(&GPDMACfg, GPDMA_Callback0); /* Reset terminal counter */ Channel0_TC = 0; /* Reset Error counter */ Channel0_Err = 0; /* Configure GPDMA channel 1 -------------------------------------------------------------*/ /* DMA Channel 1 */ GPDMACfg.ChannelNum = 1; // Source memory - not used GPDMACfg.SrcMemAddr = 0; // Destination memory - Not used GPDMACfg.DstMemAddr = (uint32_t) &dma_dst; // Transfer size GPDMACfg.TransferSize = sizeof(dma_dst); // Transfer width - not used GPDMACfg.TransferWidth = 0; // Transfer type GPDMACfg.TransferType = GPDMA_TRANSFERTYPE_P2M; // Source connection GPDMACfg.SrcConn = GPDMA_CONN_SSP0_Rx; // Destination connection - not used GPDMACfg.DstConn = 0; // Linker List Item - unused GPDMACfg.DMALLI = 0; // Setup channel with given parameter GPDMA_Setup(&GPDMACfg, GPDMA_Callback1); /* Reset terminal counter */ Channel1_TC = 0; /* Reset Error counter */ Channel1_Err = 0; _DBG_("Start transfer..."); // Enable Tx and Rx DMA on SSP0 SSP_DMACmd (LPC_SSP0, SSP_DMA_RX, ENABLE); SSP_DMACmd (LPC_SSP0, SSP_DMA_TX, ENABLE); // Enable GPDMA channel 0 GPDMA_ChannelCmd(0, ENABLE); // Enable GPDMA channel 0 GPDMA_ChannelCmd(1, ENABLE); // Enable interrupt for DMA NVIC_EnableIRQ (DMA_IRQn); /* Wait for GPDMA processing complete */ while (((Channel0_TC == 0) && (Channel0_Err == 0)) \ || ((Channel1_TC == 0) && (Channel1_Err ==0))); /* Verify buffer */ Buffer_Verify(); _DBG_("Verify complete!"); /* Loop forever */ while(1); return 1; }
portBASE_TYPE FreeRTOS_SSP_open( Peripheral_Control_t * const pxPeripheralControl ) { PINSEL_CFG_Type xPinConfig; portBASE_TYPE xReturn = pdFAIL; LPC_SSP_TypeDef * const pxSSP = ( LPC_SSP_TypeDef * const ) diGET_PERIPHERAL_BASE_ADDRESS( pxPeripheralControl ); SSP_DATA_SETUP_Type *pxSSPTransferDefinition; const int8_t cPeripheralNumber = diGET_PERIPHERAL_NUMBER( pxPeripheralControl ); volatile uint16_t usJunkIt; /* Sanity check the peripheral number. */ if( cPeripheralNumber < boardNUM_SSPS ) { /* Polled mode is used by default. Create the structure used to transfer SSP data in polled mode. */ pxSSPTransferDefinition = ( SSP_DATA_SETUP_Type * ) pvPortMalloc( sizeof( SSP_DATA_SETUP_Type ) ); if( pxSSPTransferDefinition != NULL ) { /* Create the transfer control structures in which references to pxSSPTransferDefinition will be stored. */ vIOUtilsCreateTransferControlStructure( &( pxPeripheralControl->pxTxControl ) ); vIOUtilsCreateTransferControlStructure( &( pxPeripheralControl->pxRxControl ) ); if( ( pxPeripheralControl->pxTxControl != NULL ) && ( pxPeripheralControl->pxTxControl != NULL ) ) { pxPeripheralControl->read = FreeRTOS_SSP_read; pxPeripheralControl->write = FreeRTOS_SSP_write; pxPeripheralControl->ioctl = FreeRTOS_SSP_ioctl; pxPeripheralControl->pxTxControl->pvTransferState = pxSSPTransferDefinition; pxPeripheralControl->pxTxControl->ucType = ioctlUSE_POLLED_TX; pxPeripheralControl->pxRxControl->pvTransferState = NULL; pxPeripheralControl->pxRxControl->ucType = ioctlUSE_POLLED_RX; taskENTER_CRITICAL(); { /* Setup the pins for the SSP being used. */ boardCONFIGURE_SSP_PINS( cPeripheralNumber, xPinConfig ); /* Set up the default SSP configuration. */ SSP_ConfigStructInit( &( xSSPConfigurations[ cPeripheralNumber ] ) ); SSP_Init( pxSSP, &( xSSPConfigurations[ cPeripheralNumber ] ) ); SSP_Cmd( pxSSP, ENABLE ); /* Clear data in Rx Fifo. */ while( ( pxSSP->SR & SSP_SR_RNE ) != 0 ) { usJunkIt = pxSSP->DR; } } taskEXIT_CRITICAL(); xReturn = pdPASS; } else { /* Could not create one of other transfer control structure, so free the created LPC_SSP_TypeDef typedef structures and any transfer control structures that were created before exiting. */ if( pxPeripheralControl->pxTxControl != NULL ) { vPortFree( pxPeripheralControl->pxTxControl ); pxPeripheralControl->pxTxControl = NULL; } if( pxPeripheralControl->pxRxControl != NULL ) { vPortFree( pxPeripheralControl->pxRxControl ); pxPeripheralControl->pxRxControl = NULL; } vPortFree( pxSSPTransferDefinition ); } } } return xReturn; }
/*********************************************************************//** * @brief c_entry: Main SSP program body * @param[in] None * @return int **********************************************************************/ int c_entry(void) { uint8_t tmpchar[2] = {0, 0}; PINSEL_CFG_Type PinCfg; __IO FlagStatus exitflag; /* * Initialize SPI pin connect * P0.15 - SCK * P0.16 - SSEL - used as GPIO * P0.17 - MISO * P0.18 - MOSI */ PinCfg.Funcnum = 2; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 0; PinCfg.Pinnum = 15; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 17; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 18; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 16; PinCfg.Funcnum = 0; PINSEL_ConfigPin(&PinCfg); /* Initialize debug via UART0 * – 115200bps * – 8 data bit * – No parity * – 1 stop bit * – No flow control */ debug_frmwrk_init(); // print welcome screen print_menu(); // initialize SSP configuration structure to default SSP_ConfigStructInit(&SSP_ConfigStruct); // Initialize SSP peripheral with parameter given in structure above SSP_Init(LPC_SSP0, &SSP_ConfigStruct); // Initialize /CS pin to GPIO function CS_Init(); // Enable SSP peripheral SSP_Cmd(LPC_SSP0, ENABLE); /* preemption = 1, sub-priority = 1 */ NVIC_SetPriority(SSP0_IRQn, ((0x01<<3)|0x01)); /* Enable SSP0 interrupt */ NVIC_EnableIRQ(SSP0_IRQn); /* First, send some command to reset SC16IS740 chip via SSP bus interface * note driver /CS pin to low state before transferring by CS_Enable() function */ complete = RESET; CS_Force(0); xferConfig.tx_data = iocon_cfg; xferConfig.rx_data = sspreadbuf; xferConfig.length = sizeof (iocon_cfg); SSP_ReadWrite(LPC_SSP0, &xferConfig, SSP_TRANSFER_INTERRUPT); while (complete == RESET); CS_Force(1); complete = RESET; CS_Force(0); xferConfig.tx_data = iodir_cfg; xferConfig.rx_data = sspreadbuf; xferConfig.length = sizeof (iodir_cfg); SSP_ReadWrite(LPC_SSP0, &xferConfig, SSP_TRANSFER_INTERRUPT); while (complete == RESET); CS_Force(1); // Reset exit flag exitflag = RESET; /* Read some data from the buffer */ while (exitflag == RESET) { while((tmpchar[0] = _DG) == 0); if (tmpchar[0] == 27){ /* ESC key, set exit flag */ _DBG_(menu2); exitflag = SET; } else if (tmpchar[0] == 'r'){ print_menu(); } else { if (tmpchar[0] == '1') { // LEDs are ON now... CS_Force(0); xferConfig.tx_data = iostate_on; xferConfig.rx_data = sspreadbuf; xferConfig.length = sizeof (iostate_on); SSP_ReadWrite(LPC_SSP0, &xferConfig, SSP_TRANSFER_POLLING); CS_Force(1); } else if (tmpchar[0] == '2') { // LEDs are OFF now... CS_Force(0); xferConfig.tx_data = iostate_off; xferConfig.rx_data = sspreadbuf; xferConfig.length = sizeof (iostate_off); SSP_ReadWrite(LPC_SSP0, &xferConfig, SSP_TRANSFER_POLLING); CS_Force(1); } /* Then Echo it back */ _DBG_(tmpchar); } } // wait for current transmission complete - THR must be empty while (UART_CheckBusy(LPC_UART0) == SET ); // DeInitialize UART0 peripheral UART_DeInit(LPC_UART0); /* Loop forever */ while(1); return 1; }
/*********************************************************************//** * @brief c_entry: Main TI program body * @param[in] None * @return int **********************************************************************/ int c_entry(void) { PINSEL_CFG_Type PinCfg; /* Initialize debug via UART0 * – 115200bps * – 8 data bit * – No parity * – 1 stop bit * – No flow control */ debug_frmwrk_init(); // print welcome screen print_menu(); /* * Initialize SSP pin connect * P0.6 - SSEL1 * P0.7 - SCK1 * P0.8 - MISO1 * P0.9 - MOSI1 */ PinCfg.Funcnum = 2; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 0; PinCfg.Pinnum = 6; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 7; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 8; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 9; PINSEL_ConfigPin(&PinCfg); /* * Initialize SSP pin connect * P0.15 - SCK * P0.16 - SSEL * P0.17 - MISO * P0.18 - MOSI */ PinCfg.Funcnum = 2; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 0; PinCfg.Pinnum = 15; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 17; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 18; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 16; PINSEL_ConfigPin(&PinCfg); /* Initializing Master SSP device section ------------------------------------------- */ // initialize SSP configuration structure to default SSP_ConfigStructInit(&SSP_ConfigStruct); // Re-configure SSP to TI frame format SSP_ConfigStruct.FrameFormat = SSP_FRAME_TI; // Initialize SSP peripheral with parameter given in structure above SSP_Init(SSPDEV_M, &SSP_ConfigStruct); // Enable SSP peripheral SSP_Cmd(SSPDEV_M, ENABLE); /* Initializing Slave SSP device section ------------------------------------------- */ // initialize SSP configuration structure to default SSP_ConfigStructInit(&SSP_ConfigStruct); /* Re-configure mode for SSP device */ SSP_ConfigStruct.Mode = SSP_SLAVE_MODE; // Re-configure SSP to TI frame format SSP_ConfigStruct.FrameFormat = SSP_FRAME_TI; // Initialize SSP peripheral with parameter given in structure above SSP_Init(SSPDEV_S, &SSP_ConfigStruct); // Enable SSP peripheral SSP_Cmd(SSPDEV_S, ENABLE); /* Interrupt configuration section ------------------------------------------------- */ #if ((USEDSSPDEV_S == 0) || (USEDSSPDEV_M == 0)) /* preemption = 1, sub-priority = 1 */ NVIC_SetPriority(SSP0_IRQn, ((0x01<<3)|0x01)); /* Enable SSP0 interrupt */ NVIC_EnableIRQ(SSP0_IRQn); #endif #if ((USEDSSPDEV_S == 1) || (USEDSSPDEV_M == 1)) /* preemption = 1, sub-priority = 1 */ NVIC_SetPriority(SSP1_IRQn, ((0x01<<3)|0x01)); /* Enable SSP0 interrupt */ NVIC_EnableIRQ(SSP1_IRQn); #endif /* Initializing Buffer section ------------------------------------------------- */ Buffer_Init(); /* Start Transmit/Receive between Master and Slave ----------------------------- */ complete_S = FALSE; complete_M = FALSE; /* Slave must be ready first */ ssp_SlaveReadWrite(SSPDEV_S, Slave_Rx_Buf, Slave_Tx_Buf, BUFFER_SIZE); /* Then Master can start its transferring */ ssp_MasterReadWrite(SSPDEV_M, Master_Rx_Buf, Master_Tx_Buf, BUFFER_SIZE); /* Wait for complete */ while ((complete_S == FALSE) || (complete_M == FALSE)); /* Verify buffer */ Buffer_Verify(); _DBG_("Verify success!\n\r"); /* Loop forever */ while(1); return 1; }
/*********************************************************************//** * @brief c_entry: Main SSP program body * @param[in] None * @return int **********************************************************************/ int c_entry(void) { #if __DMA_USED__ GPDMA_Channel_CFG_Type GPDMACfg; #else SSP_DATA_SETUP_Type xferConfig; #endif /* * Initialize SSP pin connect * P0.15 - SCK; * P0.16 - SSEL * P0.17 - MISO * P0.18 - MOSI */ #if (_SSP_NO_USING == 0) PINSEL_ConfigPin(0, 15, 2); PINSEL_ConfigPin(0, 16, 2); PINSEL_ConfigPin(0, 17, 2); PINSEL_ConfigPin(0, 18, 2); #elif (_SSP_NO_USING == 1) PINSEL_ConfigPin(0, 6, 2); PINSEL_ConfigPin(0, 7, 2); PINSEL_SetFilter(0, 7, 0); PINSEL_ConfigPin(0, 8, 2); PINSEL_SetFilter(0, 8, 0); PINSEL_ConfigPin(0, 9, 2); PINSEL_SetFilter(0, 9, 0); #else PINSEL_ConfigPin(1, 0, 4); PINSEL_ConfigPin(1, 8, 4); PINSEL_ConfigPin(1, 1, 4); PINSEL_ConfigPin(1, 4, 4); #endif /* Initialize debug via UART0 * – 115200bps * – 8 data bit * – No parity * – 1 stop bit * – No flow control */ debug_frmwrk_init(); // print welcome screen print_menu(); // initialize SSP configuration structure to default SSP_ConfigStructInit(&SSP_ConfigStruct); // Initialize SSP peripheral with parameter given in structure above SSP_Init(LPC_SSP, &SSP_ConfigStruct); // Enable SSP peripheral SSP_Cmd(LPC_SSP, ENABLE); _DBG_("Press '1' to start transfer..."); while (_DG != '1'); /* Initialize Buffer */ _DBG_("Init buffer"); Buffer_Init(); _DBG_("Start transfer..."); #if __DMA_USED__ /* Initialize GPDMA controller */ GPDMA_Init(); /* Setting GPDMA interrupt */ // Disable interrupt for DMA NVIC_DisableIRQ (DMA_IRQn); /* preemption = 1, sub-priority = 1 */ NVIC_SetPriority(DMA_IRQn, ((0x01<<3)|0x01)); /* Configure GPDMA channel 0 -------------------------------------------------------------*/ /* DMA Channel 0 */ GPDMACfg.ChannelNum = 0; // Source memory GPDMACfg.SrcMemAddr = (uint32_t) &Tx_Buf; // Destination memory - Not used GPDMACfg.DstMemAddr = 0; // Transfer size GPDMACfg.TransferSize = sizeof(Tx_Buf); // Transfer width - not used GPDMACfg.TransferWidth = 0; // Transfer type GPDMACfg.TransferType = GPDMA_TRANSFERTYPE_M2P; // Source connection - unused GPDMACfg.SrcConn = 0; // Destination connection GPDMACfg.DstConn = SSP_TX_SRC_DMA_CONN; // Linker List Item - unused GPDMACfg.DMALLI = 0; // Setup channel with given parameter GPDMA_Setup(&GPDMACfg); /* Reset terminal counter */ Channel0_TC = 0; /* Reset Error counter */ Channel0_Err = 0; /* Configure GPDMA channel 1 -------------------------------------------------------------*/ /* DMA Channel 1 */ GPDMACfg.ChannelNum = 1; // Source memory - not used GPDMACfg.SrcMemAddr = 0; // Destination memory - Not used GPDMACfg.DstMemAddr = (uint32_t) &Rx_Buf; // Transfer size GPDMACfg.TransferSize = sizeof(Rx_Buf); // Transfer width - not used GPDMACfg.TransferWidth = 0; // Transfer type GPDMACfg.TransferType = GPDMA_TRANSFERTYPE_P2M; // Source connection GPDMACfg.SrcConn = SSP_RX_SRC_DMA_CONN; // Destination connection - not used GPDMACfg.DstConn = 0; // Linker List Item - unused GPDMACfg.DMALLI = 0; // Setup channel with given parameter GPDMA_Setup(&GPDMACfg); /* Reset terminal counter */ Channel1_TC = 0; /* Reset Error counter */ Channel1_Err = 0; // Enable Tx and Rx DMA on SSP0 SSP_DMACmd (LPC_SSP, SSP_DMA_RX, ENABLE); SSP_DMACmd (LPC_SSP, SSP_DMA_TX, ENABLE); // Enable GPDMA channel 0 GPDMA_ChannelCmd(0, ENABLE); // Enable GPDMA channel 0 GPDMA_ChannelCmd(1, ENABLE); // Enable interrupt for DMA NVIC_EnableIRQ (DMA_IRQn); /* Wait for GPDMA processing complete */ while (((Channel0_TC == 0) && (Channel0_Err == 0)) \ || ((Channel1_TC == 0) && (Channel1_Err ==0))); #else xferConfig.tx_data = Tx_Buf; xferConfig.rx_data = Rx_Buf; xferConfig.length = BUFFER_SIZE; SSP_ReadWrite(LPC_SSP, &xferConfig, SSP_TRANSFER_POLLING); #endif // Verify buffer after transferring Buffer_Verify(); _DBG_("Verify complete!"); /* Loop forever */ while(1); }
/*********************************************************************//** * @brief Initialize and Configure SSP device * @param[in] SSPx SSP peripheral selected, should be: * - LPC_SSP0: SSP0 peripheral * - LPC_SSP1: SSP1 peripheral * @return None ***********************************************************************/ void SSP_Config (LPC_SSP_TypeDef *SSPx) { // Pin configuration for SSP PINSEL_CFG_Type PinCfg; // SSP Configuration structure variable SSP_CFG_Type SSP_ConfigStruct; if(SSPx == LPC_SSP0) { /* * Initialize SSP pin connect * P0.15 - SCK0; * P0.16 - SSEL0 - used as GPIO * P0.17 - MISO0 * P0.18 - MOSI0 */ PinCfg.Funcnum = 2; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 0; PinCfg.Pinnum = 15; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 17; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 18; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 16; PinCfg.Funcnum = 0; PINSEL_ConfigPin(&PinCfg); } else if(SSPx == LPC_SSP1) { /* * Initialize SSP pin connect * P0.6 - SSEL1 - used as GPIO * P0.7 - SCK1 * P0.8 - MISO1 * P0.9 - MOSI1 */ PinCfg.Funcnum = 2; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 0; PinCfg.Pinnum = 7; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 8; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 9; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 6; PinCfg.Funcnum = 0; PINSEL_ConfigPin(&PinCfg); } // initialize SSP configuration structure to default SSP_ConfigStructInit(&SSP_ConfigStruct); SSP_ConfigStruct.ClockRate = 3000000; SSP_ConfigStruct.Databit = SSP_DATABIT_8; // Initialize SSP peripheral with parameter given in structure above SSP_Init(SSPx, &SSP_ConfigStruct); CS_Init1(SSPx); // Chip Select Init // Enable SSP peripheral SSP_Cmd(SSPx, ENABLE); Buffer_Init1(); // Empty Buffer }
/*********************************************************************//** * @brief c_entry: Main MICROWIRE program body * @param[in] None * @return int **********************************************************************/ int c_entry(void) { uint32_t cnt; PINSEL_CFG_Type PinCfg; /* Initialize debug via UART0 * – 115200bps * – 8 data bit * – No parity * – 1 stop bit * – No flow control */ debug_frmwrk_init(); // print welcome screen print_menu(); /* * Initialize SSP pin connect * P0.6 - SSEL1 * P0.7 - SCK1 * P0.8 - MISO1 * P0.9 - MOSI1 */ PinCfg.Funcnum = 2; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 0; PinCfg.Pinnum = 6; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 7; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 8; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 9; PINSEL_ConfigPin(&PinCfg); /* * Initialize SSP pin connect * P0.15 - SCK * P0.16 - SSEL * P0.17 - MISO * P0.18 - MOSI */ PinCfg.Funcnum = 2; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 0; PinCfg.Pinnum = 15; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 17; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 18; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 16; PINSEL_ConfigPin(&PinCfg); /* Initializing Master SSP device section ------------------------------------------- */ // initialize SSP configuration structure to default SSP_ConfigStructInit(&SSP_ConfigStruct); // Re-configure SSP to MicroWire frame format SSP_ConfigStruct.FrameFormat = SSP_FRAME_MICROWIRE; // Initialize SSP peripheral with parameter given in structure above SSP_Init(SSPDEV_M, &SSP_ConfigStruct); // Enable SSP peripheral SSP_Cmd(SSPDEV_M, ENABLE); /* Initializing Slave SSP device section ------------------------------------------- */ // initialize SSP configuration structure to default SSP_ConfigStructInit(&SSP_ConfigStruct); /* Re-configure mode for SSP device */ SSP_ConfigStruct.Mode = SSP_SLAVE_MODE; // Re-configure SSP to MicroWire frame format SSP_ConfigStruct.FrameFormat = SSP_FRAME_MICROWIRE; // Initialize SSP peripheral with parameter given in structure above SSP_Init(SSPDEV_S, &SSP_ConfigStruct); // Enable SSP peripheral SSP_Cmd(SSPDEV_S, ENABLE); /* Initializing Buffer section ------------------------------------------------- */ Buffer_Init(); /* Start Transmit/Receive between Master and Slave ----------------------------- */ pRdBuf_M = (uint8_t *)&Master_Rx_Buf[0]; RdIdx_M = 0; DatLen_M = BUFFER_SIZE; pWrBuf_S = (uint8_t *)&Slave_Tx_Buf[0]; WrIdx_S = 0; DatLen_S = BUFFER_SIZE; /* Force Last command to Read command as default */ Last_cmd = MicroWire_RD_CMD; /* Clear all remaining data in RX FIFO */ while (SSP_GetStatus(SSPDEV_M, SSP_STAT_RXFIFO_NOTEMPTY)) { SSP_ReceiveData(SSPDEV_M); } while (SSP_GetStatus(SSPDEV_S, SSP_STAT_RXFIFO_NOTEMPTY)) { SSP_ReceiveData(SSPDEV_S); } for (cnt = 0; cnt < BUFFER_SIZE; cnt++) { /* The slave must initialize data in FIFO for immediately transfer from master * due to last received command */ if (Last_cmd == MicroWire_RD_CMD) { // Then send the respond to master, this contains data ssp_MW_SendRSP(SSPDEV_S, (uint16_t) *(pWrBuf_S + WrIdx_S++)); } else { // Then send the respond to master, this contains data ssp_MW_SendRSP(SSPDEV_S, 0xFF); } /* Master must send a read command to slave, * the slave then respond with its data in FIFO */ ssp_MW_SendCMD(SSPDEV_M, MicroWire_RD_CMD); // Master receive respond *(pRdBuf_M + RdIdx_M++) = (uint8_t) ssp_MW_GetRSP(SSPDEV_M); // Re-assign Last command Last_cmd = ssp_MW_GetCMD(SSPDEV_S); } /* Verify buffer */ Buffer_Verify(); _DBG_("Verify success!\n\r"); /* Loop forever */ while(1); return 1; }
/*********************************************************************//** * @brief c_entry: Main TI program body * @param[in] None * @return int **********************************************************************/ int c_entry(void) { /* Initialize debug via UART0 * – 115200bps * – 8 data bit * – No parity * – 1 stop bit * – No flow control */ debug_frmwrk_init(); // print welcome screen print_menu(); /* * Initialize SSP pin connect */ #if (SSP0_LOCALTION_NUM == 0) // SSP0 Loc 1 PINSEL_ConfigPin(0, 15, 2); // SCK J5-19 PINSEL_ConfigPin(0, 16, 2); // SSEL J3-24 PINSEL_ConfigPin(0, 17, 2); // MISO J5-20 PINSEL_ConfigPin(0, 18, 2); // MOSI J3-23 #elif (SSP0_LOCALTION_NUM == 1) // SSP0 Loc 2 PINSEL_ConfigPin(1, 20, 5); //SCK J5-32 PINSEL_ConfigPin(1, 28, 5); //SEL J5-36 PINSEL_ConfigPin(1, 23, 5); // MISO J3-35 PINSEL_ConfigPin(1, 24, 5); // MOSI J5-34 #elif (SSP0_LOCALTION_NUM == 2) //SSP0 Loc 3 PINSEL_ConfigPin(2, 22, 2); // SCK J5-47 PINSEL_ConfigPin(2, 23, 2); // SSEL J5-56 PINSEL_ConfigPin(2, 26, 2); // MISO J5-57 PINSEL_ConfigPin(2, 27, 2); // MOSI J5-49 #else while(1); #endif #if (SSP1_LOCALTION_NUM == 0) // Loc 1 PINSEL_ConfigPin(0, 7, 2); // SCK J5.17 PINSEL_SetFilter(0, 7, 0); PINSEL_ConfigPin(0, 6, 2); // SSEL J3.18 PINSEL_ConfigPin(0, 8, 2); // MISO J3.19 PINSEL_SetFilter(0, 8, 0); PINSEL_ConfigPin(0, 9, 2); // MOSI J5.18 PINSEL_SetFilter(0, 9, 0); #elif (SSP1_LOCALTION_NUM == 1) // Loc 2 PINSEL_ConfigPin(1, 19, 5); // SCK J3-33 PINSEL_ConfigPin(1, 26, 5); //SSEL J5-35 PINSEL_ConfigPin(1, 18, 5); //MISO J5-31 PINSEL_ConfigPin(1, 22, 5); //MOSI J5-33 #elif (SSP1_LOCALTION_NUM == 2) // Loc 3 PINSEL_ConfigPin(1, 31, 2); //SCK J3-39 PINSEL_ConfigPin(0, 14, 2); //SSEL J3-21 PINSEL_ConfigPin(0, 12, 2); //MISO J3-22 PINSEL_ConfigPin(0, 13, 2); //MOSI J3-13 #else while(1); #endif /* Initializing Master SSP device section ------------------------------------------- */ // initialize SSP configuration structure to default SSP_ConfigStructInit(&SSP_ConfigStruct); // Re-configure SSP to TI frame format SSP_ConfigStruct.FrameFormat = SSP_FRAME_TI; // Initialize SSP peripheral with parameter given in structure above SSP_Init(SSPDEV_M, &SSP_ConfigStruct); // Enable SSP peripheral SSP_Cmd(SSPDEV_M, ENABLE); /* Initializing Slave SSP device section ------------------------------------------- */ // initialize SSP configuration structure to default SSP_ConfigStructInit(&SSP_ConfigStruct); /* Re-configure mode for SSP device */ SSP_ConfigStruct.Mode = SSP_SLAVE_MODE; // Re-configure SSP to TI frame format SSP_ConfigStruct.FrameFormat = SSP_FRAME_TI; // Initialize SSP peripheral with parameter given in structure above SSP_Init(SSPDEV_S, &SSP_ConfigStruct); // Enable SSP peripheral SSP_Cmd(SSPDEV_S, ENABLE); /* Interrupt configuration section ------------------------------------------------- */ #if ((USEDSSPDEV_S == 0) || (USEDSSPDEV_M == 0)) /* preemption = 1, sub-priority = 1 */ NVIC_SetPriority(SSP0_IRQn, ((0x01<<3)|0x01)); /* Enable SSP0 interrupt */ NVIC_EnableIRQ(SSP0_IRQn); #endif #if ((USEDSSPDEV_S == 1) || (USEDSSPDEV_M == 1)) /* preemption = 1, sub-priority = 1 */ NVIC_SetPriority(SSP1_IRQn, ((0x01<<3)|0x01)); /* Enable SSP0 interrupt */ NVIC_EnableIRQ(SSP1_IRQn); #endif _DBG_("Press '1' to start transfer..."); while (_DG != '1'); /* Initializing Buffer section ------------------------------------------------- */ Buffer_Init(); /* Start Transmit/Receive between Master and Slave ----------------------------- */ complete_S = FALSE; complete_M = FALSE; /* Slave must be ready first */ ssp_SlaveReadWrite(SSPDEV_S, Slave_Rx_Buf, Slave_Tx_Buf, BUFFER_SIZE); /* Then Master can start its transferring */ ssp_MasterReadWrite(SSPDEV_M, Master_Rx_Buf, Master_Tx_Buf, BUFFER_SIZE); /* Wait for complete */ while ((complete_S == FALSE) || (complete_M == FALSE)); /* Verify buffer */ Buffer_Verify(); _DBG_("Verify success!\n\r"); /* Loop forever */ while(1); }
/*********************************************************************//** * @brief Main SSP program body **********************************************************************/ int c_entry(void) { uint8_t tmpchar[2] = {0, 0}; PINSEL_CFG_Type PinCfg; __IO FlagStatus exitflag; SSP_DATA_SETUP_Type xferConfig; // DeInit NVIC and SCBNVIC NVIC_DeInit(); NVIC_SCBDeInit(); /* Configure the NVIC Preemption Priority Bits: * two (2) bits of preemption priority, six (6) bits of sub-priority. * Since the Number of Bits used for Priority Levels is five (5), so the * actual bit number of sub-priority is three (3) */ NVIC_SetPriorityGrouping(0x05); // Set Vector table offset value #if (__RAM_MODE__==1) NVIC_SetVTOR(0x10000000); #else NVIC_SetVTOR(0x00000000); #endif /* * Initialize SPI pin connect * P0.15 - SCK * P0.16 - SSEL - used as GPIO * P0.17 - MISO * P0.18 - MOSI */ PinCfg.Funcnum = 2; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 0; PinCfg.Pinnum = 15; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 17; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 18; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 16; PinCfg.Funcnum = 0; PINSEL_ConfigPin(&PinCfg); /* * Initialize debug via UART */ debug_frmwrk_init(); // print welcome screen print_menu(); // initialize SSP configuration structure to default SSP_ConfigStructInit(&SSP_ConfigStruct); // Initialize SSP peripheral with parameter given in structure above SSP_Init(LPC_SSP0, &SSP_ConfigStruct); // Initialize /CS pin to GPIO function CS_Init(); // Enable SSP peripheral SSP_Cmd(LPC_SSP0, ENABLE); /* First, send some command to reset SC16IS740 chip via SSP bus interface * note driver /CS pin to low state before transferring by CS_Enable() function */ CS_Force(0); xferConfig.tx_data = iocon_cfg; xferConfig.rx_data = sspreadbuf; xferConfig.length = sizeof (iocon_cfg); SSP_ReadWrite(LPC_SSP0, &xferConfig, SSP_TRANSFER_POLLING); CS_Force(1); CS_Force(0); xferConfig.tx_data = iodir_cfg; xferConfig.rx_data = sspreadbuf; xferConfig.length = sizeof (iodir_cfg); SSP_ReadWrite(LPC_SSP0, &xferConfig, SSP_TRANSFER_POLLING); CS_Force(1); // Reset exit flag exitflag = RESET; /* Read some data from the buffer */ while (exitflag == RESET) { while((tmpchar[0] = _DG) == 0); if (tmpchar[0] == 27){ /* ESC key, set exit flag */ _DBG_(menu2); exitflag = SET; } else if (tmpchar[0] == 'r'){ print_menu(); } else { if (tmpchar[0] == '1') { // LEDs are ON now... CS_Force(0); xferConfig.tx_data = iostate_on; xferConfig.rx_data = sspreadbuf; xferConfig.length = sizeof (iostate_on); SSP_ReadWrite(LPC_SSP0, &xferConfig, SSP_TRANSFER_POLLING); CS_Force(1); } else if (tmpchar[0] == '2') { // LEDs are OFF now... CS_Force(0); xferConfig.tx_data = iostate_off; xferConfig.rx_data = sspreadbuf; xferConfig.length = sizeof (iostate_off); SSP_ReadWrite(LPC_SSP0, &xferConfig, SSP_TRANSFER_POLLING); CS_Force(1); } /* Then Echo it back */ _DBG_(tmpchar); } } // wait for current transmission complete - THR must be empty while (UART_CheckBusy(LPC_UART0) == SET); // DeInitialize UART0 peripheral UART_DeInit(LPC_UART0); /* Loop forever */ while(1); return 1; }