/*********************************************************************//** * @brief Main 4-bit LCD porting with GPIO program body **********************************************************************/ int c_entry(void) { // 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 debug */ debug_frmwrk_init(); // print welcome screen print_menu(); /* LCD block section -------------------------------------------- */ GLCD_Init(); // LCD_cur_off(); GLCD_Clear(White); /* Update LCD Module display text. */ GLCD_DisplayString(0,0, lcd_text[0] ); GLCD_DisplayString(1,2, lcd_text[1] ); /* Loop forever */ while(1); return 1; }
/*********************************************************************//** * @brief Main GPDMA program body **********************************************************************/ int c_entry(void) { GPDMA_Channel_CFG_Type GPDMACfg; // 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 debug via UART */ debug_frmwrk_init(); // print welcome screen print_menu(); /* GPDMA block section -------------------------------------------- */ /* Initialize buffer */ _DBG_("Initialize Buffer..."); Buffer_Init(); /* Disable GPDMA interrupt */ NVIC_DisableIRQ(DMA_IRQn); /* preemption = 1, sub-priority = 1 */ NVIC_SetPriority(DMA_IRQn, ((0x01<<3)|0x01)); /* Initialize GPDMA controller */ GPDMA_Init(); // Setup GPDMA channel -------------------------------- // channel 0 GPDMACfg.ChannelNum = 0; // Source memory GPDMACfg.SrcMemAddr = DMA_SRC; // Destination memory GPDMACfg.DstMemAddr = DMA_DST; // Transfer size GPDMACfg.TransferSize = DMA_SIZE; // Transfer width GPDMACfg.TransferWidth = GPDMA_WIDTH_WORD; // Transfer type GPDMACfg.TransferType = GPDMA_TRANSFERTYPE_M2M; // Source connection - unused GPDMACfg.SrcConn = 0; // Destination connection - unused GPDMACfg.DstConn = 0; // Linker List Item - unused GPDMACfg.DMALLI = 0; // Setup channel with given parameter GPDMA_Setup(&GPDMACfg, GPDMA_Callback); /* Reset terminal counter */ Channel0_TC = 0; /* Reset Error counter */ Channel0_Err = 0; _DBG_("Start transfer..."); // Enable GPDMA channel 0 GPDMA_ChannelCmd(0, ENABLE); /* Enable GPDMA interrupt */ NVIC_EnableIRQ(DMA_IRQn); /* Wait for GPDMA processing complete */ while ((Channel0_TC == 0) && (Channel0_Err == 0)); /* Verify buffer */ Buffer_Verify(); _DBG(compl_menu); /* Loop forever */ while(1); return 1; }
/*********************************************************************//** * @brief Main UART testing example sub-routine * Print welcome screen first, then press any key to have it * read in from the terminal and returned back to the terminal. * - Press ESC to exit * - Press 'r' to print welcome screen menu again **********************************************************************/ int c_entry(void) { // UART Configuration structure variable UART_CFG_Type UARTConfigStruct; // UART FIFO configuration Struct variable UART_FIFO_CFG_Type UARTFIFOConfigStruct; // Pin configuration for UART0 PINSEL_CFG_Type PinCfg; uint32_t idx, len; __IO FlagStatus exitflag; uint8_t buffer[10]; // 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 UART1 pin connect */ PinCfg.Funcnum = 1; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 0; for (idx = 15; idx <= 22; idx++){ PinCfg.Pinnum = idx; PINSEL_ConfigPin(&PinCfg); } /* Initialize UART Configuration parameter structure to default state: * Baudrate = 9600bps * 8 data bit * 1 Stop bit * None parity */ UART_ConfigStructInit(&UARTConfigStruct); // Initialize UART1 peripheral with given to corresponding parameter UART_Init((LPC_UART_TypeDef *)LPC_UART1, &UARTConfigStruct); /* Initialize FIFOConfigStruct to default state: * - FIFO_DMAMode = DISABLE * - FIFO_Level = UART_FIFO_TRGLEV0 * - FIFO_ResetRxBuf = ENABLE * - FIFO_ResetTxBuf = ENABLE * - FIFO_State = ENABLE */ UART_FIFOConfigStructInit(&UARTFIFOConfigStruct); // Initialize FIFO for UART1 peripheral UART_FIFOConfig((LPC_UART_TypeDef *)LPC_UART1, &UARTFIFOConfigStruct); #if (AUTO_RTS_CTS_USE==0) /* * Determine current state of CTS pin to enable Tx * activity */ if (UART_FullModemGetStatus(LPC_UART1) & UART1_MODEM_STAT_CTS) { // Enable UART Transmit UART_TxCmd((LPC_UART_TypeDef *)LPC_UART1, ENABLE); } #else // Enable UART Transmit UART_TxCmd((UART_TypeDef *)UART1, ENABLE); #endif // Reset ring buf head and tail idx __BUF_RESET(rb.rx_head); __BUF_RESET(rb.rx_tail); __BUF_RESET(rb.tx_head); __BUF_RESET(rb.tx_tail); #if AUTO_RTS_CTS_USE UART_FullModemConfigMode(UART1, UART1_MODEM_MODE_AUTO_RTS, ENABLE); UART_FullModemConfigMode(UART1, UART1_MODEM_MODE_AUTO_CTS, ENABLE); #else // Enable Modem status interrupt UART_IntConfig((LPC_UART_TypeDef *)LPC_UART1, UART1_INTCFG_MS, ENABLE); // Enable CTS1 signal transition interrupt UART_IntConfig((LPC_UART_TypeDef *)LPC_UART1, UART1_INTCFG_CTS, ENABLE); // Modem Status interrupt call back UART_SetupCbs((LPC_UART_TypeDef *)LPC_UART1, 4, (void *)UART1_ModemCallBack); // Force RTS pin state to ACTIVE UART_FullModemForcePinState(LPC_UART1, UART1_MODEM_PIN_RTS, ACTIVE); //RESET RTS State flag RTS_State = ACTIVE; #endif // Setup callback --------------- // Receive callback UART_SetupCbs((LPC_UART_TypeDef *)LPC_UART1, 0, (void *)UART1_IntReceive); // Transmit callback UART_SetupCbs((LPC_UART_TypeDef *)LPC_UART1, 1, (void *)UART1_IntTransmit); // Line Status Error callback UART_SetupCbs((LPC_UART_TypeDef *)LPC_UART1, 3, (void *)UART1_IntErr); /* Enable UART Rx interrupt */ UART_IntConfig((LPC_UART_TypeDef *)LPC_UART1, UART_INTCFG_RBR, ENABLE); /* Enable UART line status interrupt */ UART_IntConfig((LPC_UART_TypeDef *)LPC_UART1, UART_INTCFG_RLS, ENABLE); /* * Do not enable transmit interrupt here, since it is handled by * UART_Send() function, just to reset Tx Interrupt state for the * first time */ TxIntStat = RESET; /* preemption = 1, sub-priority = 1 */ NVIC_SetPriority(UART1_IRQn, ((0x01<<3)|0x01)); /* Enable Interrupt for UART1 channel */ NVIC_EnableIRQ(UART1_IRQn); // print welcome screen print_menu(); // reset exit flag exitflag = RESET; /* Read some data from the buffer */ while (exitflag == RESET) { len = 0; while (len == 0) { len = UARTReceive((LPC_UART_TypeDef *)LPC_UART1, buffer, sizeof(buffer)); } /* Got some data */ idx = 0; while (idx < len) { if (buffer[idx] == 27) { /* ESC key, set exit flag */ UARTSend((LPC_UART_TypeDef *)LPC_UART1, menu3, sizeof(menu3)); exitflag = SET; } else if (buffer[idx] == 'r') { print_menu(); } else { /* Echo it back */ UARTSend((LPC_UART_TypeDef *)LPC_UART1, &buffer[idx], 1); } idx++; } } // wait for current transmission complete - THR must be empty while (UART_CheckBusy((LPC_UART_TypeDef *)LPC_UART1) == SET); // DeInitialize UART1 peripheral UART_DeInit((LPC_UART_TypeDef *)LPC_UART1); /* Loop forever */ while(1); return 1; }
/*********************************************************************//** * @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; }
/*********************************************************************//** * @brief Main I2C master and slave program body **********************************************************************/ int c_entry(void) { PINSEL_CFG_Type PinCfg; I2C_M_SETUP_Type transferMCfg; uint32_t tempp; uint8_t *pdat; // 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 debug */ debug_frmwrk_init(); print_menu(); /* I2C block ------------------------------------------------------------------- */ /* * Init I2C pin connect */ PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; #if ((USEDI2CDEV_M == 0)) PinCfg.Funcnum = 1; PinCfg.Pinnum = 27; PinCfg.Portnum = 0; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 28; PINSEL_ConfigPin(&PinCfg); #endif #if ((USEDI2CDEV_M == 2)) PinCfg.Funcnum = 2; PinCfg.Pinnum = 10; PinCfg.Portnum = 0; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 11; PINSEL_ConfigPin(&PinCfg); #endif // Initialize Slave I2C peripheral I2C_Init(I2CDEV_M, 100000); /* Enable Slave I2C operation */ I2C_Cmd(I2CDEV_M, ENABLE); /* Transmit -------------------------------------------------------- */ _DBG_("Press '1' to transmit"); while (_DG != '1'); _DBG_("Start Transmit..."); /* Initialize buffer */ Buffer_Init(1); /* Start I2C slave device first */ transferMCfg.sl_addr7bit = I2CDEV_S_ADDR; transferMCfg.tx_data = Master_Buf; transferMCfg.tx_length = sizeof(Master_Buf); transferMCfg.rx_data = NULL; transferMCfg.rx_length = 0; transferMCfg.retransmissions_max = 3; I2C_MasterTransferData(I2CDEV_M, &transferMCfg, I2C_TRANSFER_POLLING); /* Receive -------------------------------------------------------- */ _DBG_("Press '2' to receive"); while(_DG != '2'); _DBG_("Receive..."); /* Initialize buffer */ Buffer_Init(0); /* Start I2C slave device first */ transferMCfg.sl_addr7bit = I2CDEV_S_ADDR; transferMCfg.tx_data = NULL ; transferMCfg.tx_length = 0; transferMCfg.rx_data = Master_Buf; transferMCfg.rx_length = sizeof(Master_Buf); transferMCfg.retransmissions_max = 3; I2C_MasterTransferData(I2CDEV_M, &transferMCfg, I2C_TRANSFER_POLLING); pdat = Master_Buf; // Verify for (tempp = 0; tempp < sizeof(Master_Buf); tempp++){ if (*pdat++ != tempp){ _DBG_("Verify error"); break; } } if (tempp == sizeof(Master_Buf)){ _DBG_("Verify successfully"); } #if 1 /* Transmit and receive -------------------------------------------------------- */ _DBG_("Press '3' to Transmit, then repeat start and receive..."); while (_DG != '3'); /* Initialize buffer */ Buffer_Init(0); master_test[0] = 0xAA; master_test[1] = 0x55; /* Start I2C slave device first */ transferMCfg.sl_addr7bit = I2CDEV_S_ADDR; transferMCfg.tx_data = master_test ; transferMCfg.tx_length = sizeof(master_test); transferMCfg.rx_data = Master_Buf; transferMCfg.rx_length = sizeof(Master_Buf); transferMCfg.retransmissions_max = 3; I2C_MasterTransferData(I2CDEV_M, &transferMCfg, I2C_TRANSFER_POLLING); #endif pdat = Master_Buf; // Verify for (tempp = 0; tempp < sizeof(Master_Buf); tempp++){ if (*pdat++ != tempp){ _DBG_("Verify error"); break; } } if (tempp == sizeof(Master_Buf)){ _DBG_("Verify successfully"); } I2C_DeInit(I2CDEV_M); /* Loop forever */ while(1); return 1; }
/** * @brief Main program body */ int c_entry(void) { PINSEL_CFG_Type PinCfg; GPDMA_Channel_CFG_Type GPDMACfg; uint32_t adc_value, tmp; // 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 debug via UART */ debug_frmwrk_init(); // print welcome screen print_menu(); /* GPDMA block section -------------------------------------------- */ /* Disable GPDMA interrupt */ NVIC_DisableIRQ(DMA_IRQn); /* preemption = 1, sub-priority = 1 */ NVIC_SetPriority(DMA_IRQn, ((0x01<<3)|0x01)); /* * Init LPC_ADC pin connect * AD0.2 on P0.25 */ PinCfg.Funcnum = 1; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Pinnum = 25; PinCfg.Portnum = 0; PINSEL_ConfigPin(&PinCfg); /* Configuration for ADC : * Frequency at 1Mhz * ADC channel 2, generate interrupt to make a request for DMA source */ ADC_Init(LPC_ADC, 1000000); ADC_IntConfig(LPC_ADC,ADC_ADINTEN2,SET); ADC_ChannelCmd(LPC_ADC,ADC_CHANNEL_2,SET); /* Initialize GPDMA controller */ GPDMA_Init(); // Setup GPDMA channel -------------------------------- // channel 0 GPDMACfg.ChannelNum = 0; // Source memory - unused GPDMACfg.SrcMemAddr = 0; // Destination memory GPDMACfg.DstMemAddr = (uint32_t) &adc_value; // Transfer size GPDMACfg.TransferSize = DMA_SIZE; // Transfer width - unused GPDMACfg.TransferWidth = 0; // Transfer type GPDMACfg.TransferType = GPDMA_TRANSFERTYPE_P2M; // Source connection GPDMACfg.SrcConn = GPDMA_CONN_ADC; // Destination connection - unused GPDMACfg.DstConn = 0; // Linker List Item - unused GPDMACfg.DMALLI = 0; // Setup channel with given parameter GPDMA_Setup(&GPDMACfg, GPDMA_Callback); /* Reset terminal counter */ Channel0_TC = 0; /* Reset Error counter */ Channel0_Err = 0; /* Enable GPDMA interrupt */ NVIC_EnableIRQ(DMA_IRQn); while (1) { // Enable GPDMA channel 0 GPDMA_ChannelCmd(0, ENABLE); ADC_StartCmd(LPC_ADC,ADC_START_NOW); /* Wait for GPDMA processing complete */; while ((Channel0_TC == 0) ); // Disable GPDMA channel 0 GPDMA_ChannelCmd(0, DISABLE); //Display the result of conversion on the UART0 _DBG("ADC value on channel 2: "); _DBD32(ADC_DR_RESULT(adc_value)); _DBG_(""); // Wait for a while for(tmp = 0; tmp < 1000000; tmp++); // Re-setup channel GPDMA_Setup(&GPDMACfg, GPDMA_Callback); /* Reset terminal counter */ Channel0_TC = 0; /* Reset Error counter */ Channel0_Err = 0; } ADC_DeInit(LPC_ADC); return 1; }
/*********************************************************************//** * @brief Main PWM program body **********************************************************************/ int c_entry(void) { uint8_t temp, temp2; PWM_TIMERCFG_Type PWMCfgDat; PWM_MATCHCFG_Type PWMMatchCfgDat; 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 debug */ debug_frmwrk_init(); // print welcome screen print_menu(); /* PWM block section -------------------------------------------- */ /* Initialize PWM peripheral, timer mode * PWM prescale value = 1 (absolute value - tick value) */ PWMCfgDat.PrescaleOption = PWM_TIMER_PRESCALE_TICKVAL; PWMCfgDat.PrescaleValue = 1; PWM_Init(LPC_PWM1, PWM_MODE_TIMER, (void *) &PWMCfgDat); /* * Initialize PWM pin connect */ PinCfg.Funcnum = 1; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Portnum = 2; for (temp = 0; temp <= 6; temp++){ PinCfg.Pinnum = temp; PINSEL_ConfigPin(&PinCfg); } /* Set match value for PWM match channel 0 = 256, update immediately */ PWM_MatchUpdate(LPC_PWM1, 0, 256, PWM_MATCH_UPDATE_NOW); /* PWM Timer/Counter will be reset when channel 0 matching * no interrupt when match * no stop when match */ PWMMatchCfgDat.IntOnMatch = DISABLE; PWMMatchCfgDat.MatchChannel = 0; PWMMatchCfgDat.ResetOnMatch = ENABLE; PWMMatchCfgDat.StopOnMatch = DISABLE; PWM_ConfigMatch(LPC_PWM1, &PWMMatchCfgDat); /* Configure each PWM channel: --------------------------------------------- */ /* - Single edge * - PWM Duty on each PWM channel determined by * the match on channel 0 to the match of that match channel. * Example: PWM Duty on PWM channel 1 determined by * the match on channel 0 to the match of match channel 1. */ /* Configure PWM channel edge option * Note: PWM Channel 1 is in single mode as default state and * can not be changed to double edge mode */ for (temp = 2; temp < 7; temp++) { PWM_ChannelConfig(LPC_PWM1, temp, PWM_CHANNEL_SINGLE_EDGE); } /* Configure match value for each match channel */ temp2 = 10; for (temp = 1; temp < 7; temp++) { /* Set up match value */ PWM_MatchUpdate(LPC_PWM1, temp, temp2, PWM_MATCH_UPDATE_NOW); /* Configure match option */ PWMMatchCfgDat.IntOnMatch = DISABLE; PWMMatchCfgDat.MatchChannel = temp; PWMMatchCfgDat.ResetOnMatch = DISABLE; PWMMatchCfgDat.StopOnMatch = DISABLE; PWM_ConfigMatch(LPC_PWM1, &PWMMatchCfgDat); /* Enable PWM Channel Output */ PWM_ChannelCmd(LPC_PWM1, temp, ENABLE); /* Increase match value by 10 */ temp2 += 10; } /* Reset and Start counter */ PWM_ResetCounter(LPC_PWM1); PWM_CounterCmd(LPC_PWM1, ENABLE); /* Start PWM now */ PWM_Cmd(LPC_PWM1, ENABLE); /* Loop forever */ while(1); return 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; }
/*********************************************************************//** * @brief Main I2C master and slave program body **********************************************************************/ int c_entry(void) { PINSEL_CFG_Type PinCfg; I2C_OWNSLAVEADDR_CFG_Type OwnSlavAdr; I2C_M_SETUP_Type transferMCfg; I2C_S_SETUP_Type transferSCfg; uint32_t tempp; uint8_t *sp, *dp; // 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 debug */ debug_frmwrk_init(); print_menu(); /* I2C block ------------------------------------------------------------------- */ /* * Init I2C pin connect */ PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; #if ((USEDI2CDEV_M == 0) || (USEDI2CDEV_S == 0)) PinCfg.Funcnum = 1; PinCfg.Pinnum = 27; PinCfg.Portnum = 0; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 28; PINSEL_ConfigPin(&PinCfg); #endif #if ((USEDI2CDEV_M == 2) || (USEDI2CDEV_S == 2)) PinCfg.Funcnum = 2; PinCfg.Pinnum = 10; PinCfg.Portnum = 0; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 11; PINSEL_ConfigPin(&PinCfg); #endif // Initialize Master I2C peripheral I2C_Init(I2CDEV_M, 100000); // Initialize Slave I2C peripheral I2C_Init(I2CDEV_S, 100000); /* Set Own slave address for I2C device */ OwnSlavAdr.GeneralCallState = ENABLE; OwnSlavAdr.SlaveAddrChannel= 0; OwnSlavAdr.SlaveAddrMaskValue = 0xFF; OwnSlavAdr.SlaveAddr_7bit = I2CDEV_S_OWN_ADDR; I2C_SetOwnSlaveAddr(I2CDEV_S, &OwnSlavAdr); /* * Note: The master should be set higher priority than * the slave that let interrupt in master can appear * in slave's timeout condition. * A higher interrupt priority has lower number level!!! */ /* Configure interrupt for I2C in NVIC of ARM core */ #if ((USEDI2CDEV_M == 0) || (USEDI2CDEV_S == 0)) /* Disable I2C0 interrupt */ NVIC_DisableIRQ(I2C0_IRQn); #if (USEDI2CDEV_M == 0) /* preemption = 1, sub-priority = 0 */ NVIC_SetPriority(I2C0_IRQn, ((0x00<<3)|0x01)); #else /* preemption = 1, sub-priority = 2 */ NVIC_SetPriority(I2C0_IRQn, ((0x02<<3)|0x01)); #endif #endif /* ((USEDI2CDEV_M == 0) || (USEDI2CDEV_S == 0)) */ #if ((USEDI2CDEV_M == 2) || (USEDI2CDEV_S == 2)) /* Disable I2C2 interrupt */ NVIC_DisableIRQ(I2C2_IRQn); #if (USEDI2CDEV_M == 2) /* preemption = 1, sub-priority = 0 */ NVIC_SetPriority(I2C2_IRQn, ((0x00<<3)|0x01)); #else /* preemption = 1, sub-priority = 2 */ NVIC_SetPriority(I2C2_IRQn, ((0x02<<3)|0x01)); #endif #endif /* Enable Master I2C operation */ I2C_Cmd(I2CDEV_M, ENABLE); /* Enable Slave I2C operation */ I2C_Cmd(I2CDEV_S, ENABLE); #if 1 /* MASTER SEND DATA TO SLAVE -------------------------------------------------------- */ /* Force complete flag for the first time of running */ complete_S = RESET; complete_M = RESET; _DBG_("Master transmit data to slave..."); /* Initialize buffer */ Buffer_Init(0); /* Start I2C slave device first */ transferSCfg.tx_data = NULL; transferSCfg.tx_length = 0; transferSCfg.rx_data = Slave_Buf; transferSCfg.rx_length = sizeof(Slave_Buf); transferSCfg.callback = SlaveCallback; I2C_SlaveTransferData(I2CDEV_S, &transferSCfg, I2C_TRANSFER_INTERRUPT); /* Then start I2C master device */ transferMCfg.sl_addr7bit = I2CDEV_S_OWN_ADDR; transferMCfg.tx_data = Master_Buf; transferMCfg.tx_length = sizeof(Master_Buf); transferMCfg.rx_data = NULL; transferMCfg.rx_length = 0; transferMCfg.retransmissions_max = 3; transferMCfg.callback = MasterCallback; I2C_MasterTransferData(I2CDEV_M, &transferMCfg, I2C_TRANSFER_INTERRUPT); /* Wait until both of them complete */ while ((complete_M == RESET) || (complete_S == RESET)); // verify data sp = Master_Buf; dp = Slave_Buf; for (tempp = sizeof(Master_Buf); tempp; tempp--){ if(*sp++ != *dp++){ _DBG_("Verify data error!"); } } // Success! if (tempp == 0){ _DBG_("Verify data successfully!"); } /* MASTER RECEIVE DATA FROM SLAVE -------------------------------------------------------- */ /* Force complete flag for the first time of running */ complete_S = RESET; complete_M = RESET; _DBG_("Master read data from slave..."); /* Initialize buffer */ Buffer_Init(1); /* Start I2C slave device first */ transferSCfg.tx_data = Slave_Buf; transferSCfg.tx_length = sizeof(Slave_Buf); transferSCfg.rx_data = NULL; transferSCfg.rx_length = 0; transferSCfg.callback = SlaveCallback; I2C_SlaveTransferData(I2CDEV_S, &transferSCfg, I2C_TRANSFER_INTERRUPT); /* Then start I2C master device */ transferMCfg.sl_addr7bit = I2CDEV_S_OWN_ADDR; transferMCfg.tx_data = NULL; transferMCfg.tx_length = 0; transferMCfg.rx_data = Master_Buf; transferMCfg.rx_length = sizeof(Master_Buf); transferMCfg.retransmissions_max = 3; transferMCfg.callback = MasterCallback; I2C_MasterTransferData(I2CDEV_M, &transferMCfg, I2C_TRANSFER_INTERRUPT); /* Wait until both of them complete */ while ((complete_M == RESET) || (complete_S == RESET)); // verify data sp = Master_Buf; dp = Slave_Buf; for (tempp = sizeof(Master_Buf); tempp; tempp--){ if(*sp++ != *dp++){ _DBG_("Verify data error!"); } } // Success! if (tempp == 0){ _DBG_("Verify data successfully!"); } #endif #if 1 // TEST----------------------------------------------------------- // Master transmit two bytes, then repeat start and reading from slave // a number of byte /* Force complete flag for the first time of running */ complete_S = RESET; complete_M = RESET; _DBG_("Master transmit data to slave first, then repeat start and read data from slave..."); /* Initialize buffer */ Buffer_Init(1); master_test[0] = 0xAA; master_test[1] = 0x55; slave_test[0] = 0x00; slave_test[1] = 0x00; /* Start I2C slave device first */ transferSCfg.tx_data = Slave_Buf; transferSCfg.tx_length = sizeof(Slave_Buf); transferSCfg.rx_data = slave_test; transferSCfg.rx_length = sizeof(slave_test); transferSCfg.callback = SlaveCallback; I2C_SlaveTransferData(I2CDEV_S, &transferSCfg, I2C_TRANSFER_INTERRUPT); /* Then start I2C master device */ transferMCfg.sl_addr7bit = I2CDEV_S_OWN_ADDR; transferMCfg.tx_data = master_test; transferMCfg.tx_length = sizeof(master_test); transferMCfg.rx_data = Master_Buf; transferMCfg.rx_length = sizeof(Master_Buf); transferMCfg.retransmissions_max = 3; transferMCfg.callback = MasterCallback; I2C_MasterTransferData(I2CDEV_M, &transferMCfg, I2C_TRANSFER_INTERRUPT); /* Wait until both of them complete */ while ((complete_M == RESET) || (complete_S == RESET)); // verify data sp = Master_Buf; dp = Slave_Buf; for (tempp = sizeof(Master_Buf); tempp; tempp--){ if(*sp++ != *dp++){ _DBG_("Verify data error!"); } } // Success! if (tempp == 0){ _DBG_("Verify data successfully!"); } sp = master_test; dp = slave_test; for (tempp = sizeof(master_test); tempp; tempp--){ if(*sp++ != *dp++){ _DBG_("Verify data error!"); } } // Success! if (tempp == 0){ _DBG_("Verify data successfully!"); } #endif while (1){ tempp++; } /* Loop forever */ while(1); return 1; }
/*********************************************************************//** * @brief Main UART testing example sub-routine * Print welcome screen first, then press any key to have it * read in from the terminal and returned back to the terminal. * - Press ESC to exit * - Press 'r' to print welcome screen menu again **********************************************************************/ int c_entry(void) { // UART Configuration structure variable UART_CFG_Type UARTConfigStruct; // UART FIFO configuration Struct variable UART_FIFO_CFG_Type UARTFIFOConfigStruct; // Pin configuration PINSEL_CFG_Type PinCfg; // RS485 configuration UART1_RS485_CTRLCFG_Type rs485cfg; // Temp. data uint32_t idx, len; uint8_t buffer[10]; int32_t exit_flag, addr_toggle; // 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 // UART0 section ---------------------------------------------------- /* * Initialize UART0 pin connect */ PinCfg.Funcnum = 1; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Pinnum = 2; PinCfg.Portnum = 0; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 3; PINSEL_ConfigPin(&PinCfg); /* Initialize UART Configuration parameter structure to default state: * Baudrate = 115200 bps * 8 data bit * 1 Stop bit * None parity */ UART_ConfigStructInit(&UARTConfigStruct); UARTConfigStruct.Baud_rate = 115200; // Initialize UART0 peripheral with given to corresponding parameter UART_Init(LPC_UART0, &UARTConfigStruct); /* Initialize FIFOConfigStruct to default state: * - FIFO_DMAMode = DISABLE * - FIFO_Level = UART_FIFO_TRGLEV0 * - FIFO_ResetRxBuf = ENABLE * - FIFO_ResetTxBuf = ENABLE * - FIFO_State = ENABLE */ UART_FIFOConfigStructInit(&UARTFIFOConfigStruct); // Initialize FIFO for UART0 peripheral UART_FIFOConfig(LPC_UART0, &UARTFIFOConfigStruct); // Enable UART Transmit UART_TxCmd(LPC_UART0, ENABLE); // print welcome screen print_menu(); // UART1 - RS485 section ------------------------------------------------- /* * Initialize UART1 pin connect */ PinCfg.Funcnum = 2; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; // TXD1 - P2.0 PinCfg.Pinnum = 0; PinCfg.Portnum = 2; PINSEL_ConfigPin(&PinCfg); // RXD1 - P2.1 PinCfg.Pinnum = 1; PINSEL_ConfigPin(&PinCfg); // DTR1 - P2.5 PinCfg.Pinnum = 5; PINSEL_ConfigPin(&PinCfg); /* Initialize UART Configuration parameter structure to default state: * Baudrate = 9600 bps * 8 data bit * 1 Stop bit * Parity: None * Note: Parity will be enabled later in UART_RS485Config() function. */ UART_ConfigStructInit(&UARTConfigStruct); // Initialize UART0 peripheral with given to corresponding parameter UART_Init((LPC_UART_TypeDef *)LPC_UART1, &UARTConfigStruct); /* Initialize FIFOConfigStruct to default state: * - FIFO_DMAMode = DISABLE * - FIFO_Level = UART_FIFO_TRGLEV0 * - FIFO_ResetRxBuf = ENABLE * - FIFO_ResetTxBuf = ENABLE * - FIFO_State = ENABLE */ UART_FIFOConfigStructInit(&UARTFIFOConfigStruct); // Initialize FIFO for UART0 peripheral UART_FIFOConfig((LPC_UART_TypeDef *)LPC_UART1, &UARTFIFOConfigStruct); // Configure RS485 /* * - Auto Direction in Tx/Rx driving is enabled * - Direction control pin is set to DTR1 * - Direction control pole is set to "1" that means direction pin * will drive to high state before transmit data. * - Multidrop mode is disable * - Auto detect address is disabled * - Receive state is enable */ rs485cfg.AutoDirCtrl_State = ENABLE; rs485cfg.DirCtrlPin = UART1_RS485_DIRCTRL_DTR; rs485cfg.DirCtrlPol_Level = SET; rs485cfg.DelayValue = 50; rs485cfg.NormalMultiDropMode_State = DISABLE; rs485cfg.AutoAddrDetect_State = DISABLE; rs485cfg.MatchAddrValue = 0; rs485cfg.Rx_State = ENABLE; UART_RS485Config(LPC_UART1, &rs485cfg); // Setup callback --------------- // Receive callback UART_SetupCbs((LPC_UART_TypeDef *)LPC_UART1, 0, (void *)UART_IntReceive); // Line Status Error callback UART_SetupCbs((LPC_UART_TypeDef *)LPC_UART1, 3, (void *)UART_IntErr); /* Enable UART Rx interrupt */ UART_IntConfig((LPC_UART_TypeDef *)LPC_UART1, UART_INTCFG_RBR, ENABLE); /* Enable UART line status interrupt */ UART_IntConfig((LPC_UART_TypeDef *)LPC_UART1, UART_INTCFG_RLS, ENABLE); /* preemption = 1, sub-priority = 1 */ NVIC_SetPriority(UART1_IRQn, ((0x01<<3)|0x01)); /* Enable Interrupt for UART0 channel */ NVIC_EnableIRQ(UART1_IRQn); // Enable UART Transmit UART_TxCmd((LPC_UART_TypeDef *)LPC_UART1, ENABLE); addr_toggle = 1; // for testing... while (1){ // Send slave addr ----------------------------------------- UART_Send(LPC_UART0, send_menu, sizeof(send_menu), BLOCKING); // Send slave addr on RS485 bus if (addr_toggle){ UART_RS485SendSlvAddr(LPC_UART1, SLAVE_ADDR_A); } else { UART_RS485SendSlvAddr(LPC_UART1, SLAVE_ADDR_B); } // delay for a while for (len = 0; len < 1000; len++); // Send data ----------------------------------------------- if (addr_toggle){ UART_RS485SendData(LPC_UART1, slaveA_msg, sizeof(slaveA_msg)); } else { UART_RS485SendData(LPC_UART1, slaveB_msg, sizeof(slaveB_msg)); } // Send terminator UART_RS485SendData(LPC_UART1, &terminator, 1); // delay for a while for (len = 0; len < 1000; len++); // Receive data from slave -------------------------------- UART_Send(LPC_UART0, recv_menu, sizeof(recv_menu), BLOCKING); // If address 'A' required response... if (addr_toggle){ exit_flag = 0; while (!exit_flag){ len = UARTReceive((LPC_UART_TypeDef *)LPC_UART1, buffer, sizeof(buffer)); /* Got some data */ idx = 0; while (idx < len) { if (buffer[idx] == 13){ exit_flag = 1; } else { /* Echo it back */ UART_Send(LPC_UART0, &buffer[idx], 1, BLOCKING); } idx++; } } } UART_Send(LPC_UART0, nextline, sizeof(nextline), BLOCKING); addr_toggle = (addr_toggle ? 0 : 1); // long delay here for (len = 0; len < 10000000; len++); } return 1; }
/*********************************************************************//** THE MAIN CAN BODY **********************************************************************/ int c_entry(void) { /* Main Program */ uint32_t i; uint32_t cnt; CAN_ERROR error; CAN_PinCFG_Type CAN1PinStruct, CAN2PinStruct; 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(0x06); // Set Vector table offset value #if (__RAM_MODE__==1) NVIC_SetVTOR(0x10000000); #else NVIC_SetVTOR(0x00000000); #endif debug_frmwrk_init(); print_menu(); /* Pin Configuration */ CAN1PinStruct.RD = CAN_RD1_P0_0; CAN1PinStruct.TD = CAN_TD1_P0_1; CAN2PinStruct.RD = CAN_RD2_P2_7; CAN2PinStruct.TD = CAN_TD2_P2_8; PINSEL_ConfigPin((PINSEL_CFG_Type *) (&can_rd1_pin[CAN1PinStruct.RD])); PINSEL_ConfigPin((PINSEL_CFG_Type *) (&can_td1_pin[CAN1PinStruct.TD])); PINSEL_ConfigPin((PINSEL_CFG_Type *) (&can_rd2_pin[CAN2PinStruct.RD])); PINSEL_ConfigPin((PINSEL_CFG_Type *) (&can_td2_pin[CAN2PinStruct.TD])); //Initialize CAN1 & CAN2 CAN_Init(LPC_CAN1, 125000); CAN_Init(LPC_CAN2, 125000); //Enable Receive Interrupt CAN_IRQCmd(LPC_CAN2, CANINT_FCE, ENABLE); CAN_IRQCmd(LPC_CAN2, CANINT_RIE, ENABLE); CAN_IRQCmd(LPC_CAN2, CANINT_DOIE, ENABLE); CAN_SetupCBS(CANINT_FCE, CAN_Callback0); CAN_SetupCBS(CANINT_RIE, CAN_Callback1); CAN_SetupCBS(CANINT_DOIE, CAN_Callback2); //Enable CAN Interrupt NVIC_EnableIRQ(CAN_IRQn); /* First, we send 10 messages: * - message 0,2,4,6,8 have id in AFLUT >>> will be received * - message 1,3,5,7,9 don't have id in AFLUT >>> will be ignored * Then, we change AFLUT by load/remove entries in AFLUT and re-send messages * - message 1,3,5,7,9 have id in AFLUT >>> will be received * - message 0,2,4,6,8 don't have id in AFLUT >>> will be ignored * Note that: FullCAN Object must be read from FullCAN Object Section next to AFLUT */ /*-------------------------Init Message & AF Look-up Table------------------------*/ _DBG_("Test Acceptance Filter function..."); _DBG_("Press '1' to initialize message and AF Loop-up Table...");_DBG_(""); while(_DG !='1'); CAN_InitAFMessage(); /* initialize Transmit Message */ _DBG_("Init message finished!!!"); CAN_SetupAFTable(); /* initialize AF Look-up Table sections*/ error = CAN_SetupAFLUT(LPC_CANAF,&AFTable); /* install AF Look-up Table */ if (error != CAN_OK) { _DBG_("Setup AF: ERROR..."); while (1); // AF Table has error } else _DBG_("Setup AF: SUCCESSFUL!!!");_DBG_(""); /*-------------------------Send messages------------------------*/ _DBG_("Press '2' to start CAN transferring operation...");_DBG_(""); while(_DG !='2'); for (i = 0; i < CAN_TX_MSG_CNT; i++) { CAN_SendMsg(LPC_CAN1, &AFTxMsg[i]); PrintMessage(&AFTxMsg[i]);_DBG_(""); for(cnt=0;cnt<10000;cnt++); //transmit delay CANTxCount++; } _DBG_("Sending finished !!!"); /*-------------------------Display Received messages------------------------*/ _DBG_("Press '3' to display received messages...");_DBG_(""); while(_DG !='3'); for (i = 0; i < CAN_RX_MSG_CNT; i++) { PrintMessage(&AFRxMsg[i]);_DBG_(""); } /*-------------------------Change AFLUT Table --------------------*/ _DBG_("Press '4' to change AF look-up table...");_DBG_(""); while(_DG !='4'); CAN_ChangeAFTable(); _DBG_("Change AFLUT: FINISHED!!!"); CAN_SetAFMode(LPC_CANAF, CAN_eFCAN); CAN_InitAFMessage(); CANRxCount = CANTxCount = 0; /*-------------------------Re-Send messages------------------------*/ _DBG_("Press '5' to re-send messages...");_DBG_(""); while(_DG !='5'); for (i = 0; i < CAN_TX_MSG_CNT; i++) { CAN_SendMsg(LPC_CAN1, &AFTxMsg[i]); PrintMessage(&AFTxMsg[i]);_DBG_(""); for(cnt=0;cnt<10000;cnt++); //transmit delay CANTxCount++; } /*-------------------------Display received messages------------------------*/ _DBG_("Re-Sending finished !!!"); _DBG_("Press '6' to display received messages...");_DBG_(""); while(_DG !='6'); for (i = 0; i < CAN_RX_MSG_CNT; i++) { PrintMessage(&AFRxMsg[i]);_DBG_(""); } _DBG_("Demo terminal !!!"); CAN_DeInit(LPC_CAN1); CAN_DeInit(LPC_CAN2); while (1); return 0; }
/*********************************************************************//** * @brief Main I2S program body **********************************************************************/ int c_entry (void) { /* Main Program */ uint32_t i; uint8_t ch; uint8_t dummy=0; I2S_MODEConf_Type I2S_ClkConfig; I2S_CFG_Type I2S_ConfigStruct; I2S_PinCFG_Type I2S_PinStruct; // 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 NVIC_SetPriorityGrouping(0x06); debug_frmwrk_init(); print_menu(); _DBG_("Press '1' to initialize buffer..."); while(_DG !='1'); Buffer_Init(); _DBG_("Transmit Buffer init: ..."); for(i=0;i<BUFFER_SIZE;i++) { _DBH32(I2STXBuffer[i]);_DBG_(""); } _DBG_("Receive Buffer init: ..."); for(i=0;i<BUFFER_SIZE;i++) { _DBH32(I2SRXBuffer[i]);_DBG_(""); } /* Initializes pin corresponding to I2S function */ I2S_PinStruct.CLK_Pin=I2S_STX_CLK_P0_7; I2S_PinStruct.WS_Pin=I2S_STX_WS_P0_8; I2S_PinStruct.SDA_Pin=I2S_STX_SDA_P0_9; I2S_PinStruct.MCLK_Pin=I2S_TX_MCLK_P4_29; PINSEL_ConfigPin((PINSEL_CFG_Type *) (&i2s_stx_clk_pin[I2S_PinStruct.CLK_Pin])); PINSEL_ConfigPin((PINSEL_CFG_Type *) (&i2s_stx_ws_pin[I2S_PinStruct.WS_Pin])); PINSEL_ConfigPin((PINSEL_CFG_Type *) (&i2s_stx_sda_pin[I2S_PinStruct.SDA_Pin])); PINSEL_ConfigPin((PINSEL_CFG_Type *) (&i2s_tx_mclk_pin[I2S_PinStruct.MCLK_Pin])); // Configure pinsel for I2S_RX I2S_PinStruct.CLK_Pin=I2S_SRX_CLK_P0_4; I2S_PinStruct.WS_Pin=I2S_SRX_WS_P0_5; I2S_PinStruct.SDA_Pin=I2S_SRX_SDA_P0_6; I2S_PinStruct.MCLK_Pin=I2S_RX_MCLK_P4_28; PINSEL_ConfigPin((PINSEL_CFG_Type *) (&i2s_srx_clk_pin[I2S_PinStruct.CLK_Pin])); PINSEL_ConfigPin((PINSEL_CFG_Type *) (&i2s_srx_ws_pin[I2S_PinStruct.WS_Pin])); PINSEL_ConfigPin((PINSEL_CFG_Type *) (&i2s_srx_sda_pin[I2S_PinStruct.SDA_Pin])); PINSEL_ConfigPin((PINSEL_CFG_Type *) (&i2s_rx_mclk_pin[I2S_PinStruct.MCLK_Pin])); I2S_Init(LPC_I2S); //Setup for I2S: RX is similar with TX /* setup: * - wordwidth: 16 bits * - stereo mode * - master mode for I2S_TX and slave for I2S_RX * - ws_halfperiod is 31 * - not use mute mode * - use reset and stop mode * - select the fractional rate divider clock output as the source, * - disable 4-pin mode * - MCLK ouput is disable * - Frequency = 44.1 kHz (x=8,y=51 - automatic setting) * Because we use mode I2STXMODE[3:0]= 0000, I2SDAO[5]=0 and * I2SRX[3:0]=0000, I2SDAI[5] = 1. So we have I2SRX_CLK = I2STX_CLK * --> I2SRXBITRATE = 1 (not divide TXCLK to produce RXCLK) */ /* Audio Config*/ I2S_ConfigStruct.wordwidth = I2S_WORDWIDTH_16; I2S_ConfigStruct.mono = I2S_STEREO; I2S_ConfigStruct.stop = I2S_STOP_ENABLE; I2S_ConfigStruct.reset = I2S_RESET_ENABLE; I2S_ConfigStruct.ws_sel = I2S_MASTER_MODE; I2S_ConfigStruct.mute = I2S_MUTE_DISABLE; I2S_Config(LPC_I2S,I2S_TX_MODE,&I2S_ConfigStruct); I2S_ConfigStruct.ws_sel = I2S_SLAVE_MODE; I2S_Config(LPC_I2S,I2S_RX_MODE,&I2S_ConfigStruct); /* Clock Mode Config*/ I2S_ClkConfig.clksel = I2S_CLKSEL_0; I2S_ClkConfig.fpin = I2S_4PIN_DISABLE; I2S_ClkConfig.mcena = I2S_MCLK_DISABLE; I2S_ModeConfig(LPC_I2S,&I2S_ClkConfig,I2S_TX_MODE); I2S_ClkConfig.fpin = I2S_4PIN_ENABLE; I2S_ModeConfig(LPC_I2S,&I2S_ClkConfig,I2S_RX_MODE); /* Set up frequency and bit rate*/ I2S_FreqConfig(LPC_I2S, 44100, I2S_TX_MODE); // I2S_SetBitRate(I2S, 1, I2S_RX_MODE); I2S_Start(LPC_I2S); _DBG_("Press '2' to start I2S transfer process..."); while(_DG !='2'); _DBG_("I2S Start ..."); while(I2STXDone == 0||I2SRXDone == 0){ if(I2STXDone ==0){ while (I2S_GetLevel(LPC_I2S,I2S_TX_MODE)!=0x00); I2S_Send(LPC_I2S,I2STXBuffer[I2SWriteLength]); I2SWriteLength +=1; if(I2SWriteLength == BUFFER_SIZE) I2STXDone = 1; } if(I2SRXDone == 0) { while(I2S_GetLevel(LPC_I2S,I2S_RX_MODE)==0x00); if(dummy == 0) //dummy receive { i = I2S_Receive(LPC_I2S); if(i!=0) { *(uint32_t *)(&I2SRXBuffer[I2SReadLength]) = i; I2SReadLength +=1; dummy = 1; } } else { *(uint32_t *)(&I2SRXBuffer[I2SReadLength]) = I2S_Receive(LPC_I2S); I2SReadLength +=1; } if(I2SReadLength == BUFFER_SIZE) I2SRXDone = 1; } } _DBG_("I2S Finish..."); _DBG_("Receive Buffer data: ..."); for(i=0;i<BUFFER_SIZE;i++) { _DBH32(I2SRXBuffer[i]);_DBG_(""); } if(Buffer_Verify()) { _DBG_("Verify Buffer: OK..."); } else { _DBG_("Verify Buffer: ERROR..."); } while(1); }
/*---------------------------------------------------------------------------- MAIN function *----------------------------------------------------------------------------*/ int main (void) { uint32_t delay; SystemInit (); /* initialize the clocks */ /* Expansion statement ----------------------------------------------------- */ // 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 /* End of Expansion statement ------------------------------------------------ */ pSpi = &spi; /* Select 'spi0' as active communication interface */ /* Note: * Use own generated SS signal * on the port number defined by CS_PORT_NUM symbol * and the pin number defined by CS_PIN_NUM symbol */ pSpi->Cfg.SlaveSelect = SpiDev_SSO_DISABLED; SPI_SlaveSelectInit(); pSpi->Init(); #if __AT25_EXAMPLE__ bufCpy ((uint8_t *)bufTx, (uint8_t *)menu0, sizeof(menu0)); SPI_MemWrite(0x400, 36, (unsigned char*)bufTx); bufCpy ((uint8_t *)bufTx, (uint8_t *)menu1, sizeof(menu1)); SPI_MemWrite(0x450, 21, (unsigned char*)bufTx); SPI_MemRead (0x400, 128, (unsigned char*)bufRx); #endif #if __SC16IS750_EXAMPLE__ /* First, send some command to reset SC16IS740 chip via SPI bus interface * note driver /CS pin to low state before transferring by CS_Enable() function */ SPI_SlaveSelect(0); pSpi->BufTxRx ((void *)&iocon_cfg, (void *)&spireadbuf, sizeof (iocon_cfg)); SPI_SlaveSelect(1); for (delay = 0; delay < 1000000; delay++); SPI_SlaveSelect(0); pSpi->BufTxRx ((void *)&iodir_cfg, (void *)&spireadbuf, sizeof (iodir_cfg)); SPI_SlaveSelect(1); // main loop while (1) { for (delay = 0; delay < 1000000; delay++); SPI_SlaveSelect(0); pSpi->BufTxRx ((void *)&iostate_on, (void *)&spireadbuf, sizeof (iostate_on)); SPI_SlaveSelect(1); for (delay = 0; delay < 1000000; delay++); SPI_SlaveSelect(0); pSpi->BufTxRx ((void *)&iostate_off, (void *)&spireadbuf, sizeof (iostate_off)); SPI_SlaveSelect(1); } #endif while (1) ; }
/*********************************************************************//** * @brief Main I2C master and slave program body **********************************************************************/ int c_entry(void) { PINSEL_CFG_Type PinCfg; I2C_OWNSLAVEADDR_CFG_Type OwnSlavAdr; I2C_S_SETUP_Type transferSCfg; uint32_t tempp; uint8_t *pdat; // 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 debug */ debug_frmwrk_init(); print_menu(); /* I2C block ------------------------------------------------------------------- */ /* * Init I2C pin connect */ PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; #if ((USEDI2CDEV_S == 0)) PinCfg.Funcnum = 1; PinCfg.Pinnum = 27; PinCfg.Portnum = 0; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 28; PINSEL_ConfigPin(&PinCfg); #endif #if ((USEDI2CDEV_S == 2)) PinCfg.Funcnum = 2; PinCfg.Pinnum = 10; PinCfg.Portnum = 0; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 11; PINSEL_ConfigPin(&PinCfg); #endif // Initialize Slave I2C peripheral I2C_Init(I2CDEV_S, 100000); /* Set Own slave address for I2C device */ OwnSlavAdr.GeneralCallState = ENABLE; OwnSlavAdr.SlaveAddrChannel= 0; OwnSlavAdr.SlaveAddrMaskValue = 0xFF; OwnSlavAdr.SlaveAddr_7bit = I2CDEV_S_OWN_ADDR; I2C_SetOwnSlaveAddr(I2CDEV_S, &OwnSlavAdr); /* Enable Slave I2C operation */ I2C_Cmd(I2CDEV_S, ENABLE); _DBG_("Press '1' to start"); while (_DG != '1'); /* Reading -------------------------------------------------------- */ _DBG_("Start Reading..."); /* Initialize buffer */ Buffer_Init(0); /* Start I2C slave device first */ transferSCfg.tx_data = NULL; transferSCfg.tx_length = 0; transferSCfg.rx_data = Slave_Buf; transferSCfg.rx_length = sizeof(Slave_Buf); I2C_SlaveTransferData(I2CDEV_S, &transferSCfg, I2C_TRANSFER_POLLING); pdat = Slave_Buf; // Verify for (tempp = 0; tempp < sizeof(Slave_Buf); tempp++){ if (*pdat++ != tempp){ _DBG_("Verify error"); break; } } if (tempp == sizeof(Slave_Buf)){ _DBG_("Verify successfully"); } /* Transmit -------------------------------------------------------- */ _DBG_("Start Transmit..."); /* Initialize buffer */ Buffer_Init(1); /* Start I2C slave device first */ transferSCfg.tx_data = Slave_Buf; transferSCfg.tx_length = sizeof(Slave_Buf); transferSCfg.rx_data = NULL; transferSCfg.rx_length = 0; I2C_SlaveTransferData(I2CDEV_S, &transferSCfg, I2C_TRANSFER_POLLING); _DBG_("Complete!"); #if 1 /* Receive and transmit -------------------------------------------------------- */ _DBG_("Start Receive, wait for repeat start and transmit..."); /* Initialize buffer */ Buffer_Init(1); slave_test[0] = 0xAA; slave_test[1] = 0x55; /* Start I2C slave device first */ transferSCfg.tx_data = Slave_Buf; transferSCfg.tx_length = sizeof(Slave_Buf); transferSCfg.rx_data = slave_test; transferSCfg.rx_length = sizeof(slave_test); I2C_SlaveTransferData(I2CDEV_S, &transferSCfg, I2C_TRANSFER_POLLING); _DBG_("Receive Data:"); _DBH(slave_test[0]); _DBG_(""); _DBH(slave_test[1]); _DBG_(""); _DBG_("Complete!"); #endif /* Loop forever */ while(1); return 1; }
int c_entry(void) { // 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 // Init LED port LED_Init(); /* Init debug */ debug_frmwrk_init(); // print welcome screen print_menu(); // Initialize timer 0, prescale count time of 100uS TIM_ConfigStruct.PrescaleOption = TIM_PRESCALE_USVAL; TIM_ConfigStruct.PrescaleValue = 100; // use channel 0, MR0 TIM_MatchConfigStruct.MatchChannel = 0; // Disable interrupt when MR0 matches the value in TC register TIM_MatchConfigStruct.IntOnMatch = TRUE; //Enable reset on MR0: TIMER will reset if MR0 matches it TIM_MatchConfigStruct.ResetOnMatch = TRUE; //Stop on MR0 if MR0 matches it TIM_MatchConfigStruct.StopOnMatch = FALSE; //Toggle MR0.0 pin if MR0 matches it TIM_MatchConfigStruct.ExtMatchOutputType =TIM_EXTMATCH_TOGGLE; // Set Match value, count value of 10000 (10000 * 100uS = 1S --> 1Hz) TIM_MatchConfigStruct.MatchValue = 10000; // Set configuration for Tim_config and Tim_MatchConfig TIM_Init(LPC_TIM0, TIM_TIMER_MODE,&TIM_ConfigStruct); TIM_ConfigMatch(LPC_TIM0,&TIM_MatchConfigStruct); TIM_Cmd(LPC_TIM0,ENABLE); while (1) { // Wait for 1000 millisecond while ( !(TIM_GetIntStatus(LPC_TIM0,0))); { TIM_ClearIntPending(LPC_TIM0,0); //turn on led LPC_GPIO2->FIOSET = LED0_PIN; UART_Send(LPC_UART0, info1, sizeof(info1), BLOCKING); } // Wait for 1000 millisecond while ( !(TIM_GetIntStatus(LPC_TIM0,0))); { TIM_ClearIntPending(LPC_TIM0,0); //turn off led LPC_GPIO2->FIOCLR = LED0_PIN; UART_Send(LPC_UART0, info2, sizeof(info2), BLOCKING); } } TIM_DeInit(LPC_TIM0); return (1); }
int main() { // 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); NVIC_SetVTOR(0x00000000); #ifdef UARTDEBUG uart_init(); #endif BlockDevInit(); #ifdef UARTDEBUG if (1) { U32 size; BlockDevGetSize(&size); DBG("Found SD card of size %d", size); BlockDevGetBlockLength(&size); DBG("block length %d", size); } #endif if (bootloader_button_pressed() || (user_code_present() == 0)) { DBG("entering bootloader"); init_usb_msc_device(); for (;usb_msc_not_ejected();) USBHwISR(); DBG("usb ejected, rebooting"); USBHwConnect(FALSE); spi_close(); } else { if ((r = f_mount(0, &fatfs)) == FR_OK) { if ((r = f_open(&f, "/firmware.bin", FA_READ | FA_OPEN_EXISTING)) == FR_OK) { unsigned int fs = f_size(&f); DBG("found firmware.bin with %u bytes", fs); if ((fs > 0) && (fs <= USER_FLASH_SIZE)) { U8 buffer[FLASH_BUF_SIZE]; for (unsigned int i = 0; i < fs; i += FLASH_BUF_SIZE) { unsigned int j = FLASH_BUF_SIZE; if (i + j > fs) j = fs - i; DBG("writing %d-%d", i, i+j); if ((r = f_read(&f, buffer, j, &j)) == FR_OK) { // pad last block to a full sector size while (j < FLASH_BUF_SIZE) { buffer[j++] = 0xFF; } write_flash((unsigned int *) (USER_FLASH_START + i), (char *) &buffer, j); } else { DBG("read failed: %d", r); i = fs; } } r = f_close(&f); r = f_unlink("/firmware.bck"); r = f_rename("/firmware.bin", "/firmware.bck"); } } else { DBG("open \"/firmware.bin\" failed: %d", r); } #ifdef GENERATE_FIRMWARE_CUR if (f_open(&f, "/firmware.bck", FA_READ | FA_OPEN_EXISTING)) { f_close(&f); } else { // no firmware.bck, generate one! if (f_open(&f, "/firmware.bck", FA_WRITE | FA_CREATE_NEW) == FR_OK) { U8 *flash = (U8 *) USER_FLASH_START; f_close(&f); } } #endif // elm-chan's fatfs doesn't have an unmount function // f_umount(&fatfs); } else { DBG("mount failed: %d", r); } spi_close(); if (user_code_present()) { DBG("starting user code..."); execute_user_code(); } else { DBG("user code invalid, rebooting"); } } NVIC_SystemReset(); }
/*********************************************************************//** * @brief Main UART testing example sub-routine * Print welcome screen first, then press any key to have it * read in from the terminal and returned back to the terminal. * - Press ESC to exit * - Press 'r' to print welcome screen menu again **********************************************************************/ int c_entry(void) { // UART Configuration structure variable UART_CFG_Type UARTConfigStruct; // UART FIFO configuration Struct variable UART_FIFO_CFG_Type UARTFIFOConfigStruct; // Pin configuration for UART0 PINSEL_CFG_Type PinCfg; uint32_t idx, len; __IO FlagStatus exitflag; uint8_t buffer[10]; // 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 #if (UART_PORT == 0) /* * Initialize UART0 pin connect */ PinCfg.Funcnum = 1; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Pinnum = 2; PinCfg.Portnum = 0; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 3; PINSEL_ConfigPin(&PinCfg); #endif #if (UART_PORT == 1) /* * Initialize UART1 pin connect */ PinCfg.Funcnum = 2; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Pinnum = 0; PinCfg.Portnum = 2; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 1; PINSEL_ConfigPin(&PinCfg); #endif /* Initialize UART Configuration parameter structure to default state: * Baudrate = 9600bps * 8 data bit * 1 Stop bit * None parity */ UART_ConfigStructInit(&UARTConfigStruct); // Initialize UART0 peripheral with given to corresponding parameter UART_Init(TEST_UART, &UARTConfigStruct); /* Initialize FIFOConfigStruct to default state: * - FIFO_DMAMode = DISABLE * - FIFO_Level = UART_FIFO_TRGLEV0 * - FIFO_ResetRxBuf = ENABLE * - FIFO_ResetTxBuf = ENABLE * - FIFO_State = ENABLE */ UART_FIFOConfigStructInit(&UARTFIFOConfigStruct); // Initialize FIFO for UART0 peripheral UART_FIFOConfig(TEST_UART, &UARTFIFOConfigStruct); // Enable UART Transmit UART_TxCmd(TEST_UART, ENABLE); // print welcome screen print_menu(); // Reset exit flag exitflag = RESET; /* Read some data from the buffer */ while (exitflag == RESET) { len = 0; while (len == 0) { len = UART_Receive(TEST_UART, buffer, sizeof(buffer), NONE_BLOCKING); } /* Got some data */ idx = 0; while (idx < len) { if (buffer[idx] == 27) { /* ESC key, set exit flag */ UART_Send(TEST_UART, menu3, sizeof(menu3), BLOCKING); exitflag = SET; } else if (buffer[idx] == 'r') { print_menu(); } else { /* Echo it back */ UART_Send(TEST_UART, &buffer[idx], 1, BLOCKING); } idx++; } } // wait for current transmission complete - THR must be empty while (UART_CheckBusy(TEST_UART) == SET); // DeInitialize UART0 peripheral UART_DeInit(TEST_UART); /* Loop forever */ while(1); return 1; }
/*********************************************************************//** * @brief Main UART using GPDMA program body **********************************************************************/ int c_entry(void) { uint8_t *rx_char; uint32_t idx; // UART Configuration structure variable UART_CFG_Type UARTConfigStruct; // UART FIFO configuration Struct variable UART_FIFO_CFG_Type UARTFIFOConfigStruct; GPDMA_Channel_CFG_Type GPDMACfg; // Pin configuration for UART0 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 UART0 pin connect */ PinCfg.Funcnum = 1; PinCfg.OpenDrain = 0; PinCfg.Pinmode = 0; PinCfg.Pinnum = 2; PinCfg.Portnum = 0; PINSEL_ConfigPin(&PinCfg); PinCfg.Pinnum = 3; PINSEL_ConfigPin(&PinCfg); /* Initialize UART Configuration parameter structure to default state: * Baudrate = 9600bps * 8 data bit * 1 Stop bit * None parity */ UART_ConfigStructInit(&UARTConfigStruct); // Initialize UART0 peripheral with given to corresponding parameter UART_Init(LPC_UART0, &UARTConfigStruct); /* Initialize FIFOConfigStruct to default state: * - FIFO_DMAMode = DISABLE * - FIFO_Level = UART_FIFO_TRGLEV0 * - FIFO_ResetRxBuf = ENABLE * - FIFO_ResetTxBuf = ENABLE * - FIFO_State = ENABLE */ UART_FIFOConfigStructInit(&UARTFIFOConfigStruct); // Enable DMA mode in UART UARTFIFOConfigStruct.FIFO_DMAMode = ENABLE; // Initialize FIFO for UART0 peripheral UART_FIFOConfig(LPC_UART0, &UARTFIFOConfigStruct); // Enable UART Transmit UART_TxCmd(LPC_UART0, ENABLE); /* GPDMA Interrupt configuration section ------------------------------------------------- */ /* 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)); // Setup GPDMA channel -------------------------------- // channel 0 GPDMACfg.ChannelNum = 0; // Source memory GPDMACfg.SrcMemAddr = (uint32_t) &menu1; // Destination memory - don't care GPDMACfg.DstMemAddr = 0; // Transfer size GPDMACfg.TransferSize = sizeof(menu1); // Transfer width - don't care GPDMACfg.TransferWidth = 0; // Transfer type GPDMACfg.TransferType = GPDMA_TRANSFERTYPE_M2P; // Source connection - don't care GPDMACfg.SrcConn = 0; // Destination connection GPDMACfg.DstConn = GPDMA_CONN_UART0_Tx; // Linker List Item - unused GPDMACfg.DMALLI = 0; // Setup channel with given parameter #ifdef __IAR_SYSTEMS_ICC__ GPDMA_Setup(&GPDMACfg, (fnGPDMACbs_Type *)GPDMA_Callback0); #else GPDMA_Setup(&GPDMACfg, (void *)GPDMA_Callback0); #endif // Setup GPDMA channel -------------------------------- // channel 1 GPDMACfg.ChannelNum = 1; // Source memory - don't care GPDMACfg.SrcMemAddr = 0; // Destination memory GPDMACfg.DstMemAddr = (uint32_t) &rx_buf; // Transfer size GPDMACfg.TransferSize = sizeof(rx_buf); // Transfer width - don't care GPDMACfg.TransferWidth = 0; // Transfer type GPDMACfg.TransferType = GPDMA_TRANSFERTYPE_P2M; // Source connection GPDMACfg.SrcConn = GPDMA_CONN_UART0_Rx; // Destination connection - don't care GPDMACfg.DstConn = 0; // Linker List Item - unused GPDMACfg.DMALLI = 0; /* Reset terminal counter */ Channel0_TC = 0; /* Reset Error counter */ Channel0_Err = 0; // Enable interrupt for DMA NVIC_EnableIRQ (DMA_IRQn); // Enable GPDMA channel 0 GPDMA_ChannelCmd(0, ENABLE); // Make sure GPDMA channel 1 is disabled GPDMA_ChannelCmd(1, DISABLE); /* Wait for GPDMA on UART0 Tx processing complete */ while ((Channel0_TC == 0) && (Channel0_Err == 0)); // Main loop - echos back to the terminal while (1) { /* Reset terminal counter */ Channel1_TC = 0; /* Reset Error counter */ Channel1_Err = 0; // Setup channel with given parameter #ifdef __IAR_SYSTEMS_ICC__ GPDMA_Setup(&GPDMACfg, (fnGPDMACbs_Type *)GPDMA_Callback1); #else GPDMA_Setup(&GPDMACfg, (void *)GPDMA_Callback1); #endif // Enable GPDMA channel 1 GPDMA_ChannelCmd(1, ENABLE); // Clear Rx buffer using DMA for (idx = 0; idx < RX_BUF_SIZE; idx++){ rx_buf[idx] = 0; } // now, start receive character using GPDMA rx_char = (uint8_t *) &rx_buf; while ((Channel1_TC == 0) && (Channel1_Err == 0)){ // Check whether if there's any character received, then print it back if (*rx_char != 0) { UART_Send(LPC_UART0, rx_char, 1, BLOCKING); rx_char++; } } } // DeInitialize UART0 peripheral UART_DeInit(LPC_UART0); /* Loop forever */ while(1); return 1; }