Hi AngleC,
We are able to migrate MCR20A source IAR to KDS environment.
Below are the steps:
1-Create a New Project for K22F.
2-Open the pre-build application in IAR Workbench, and copy all the files which are used in application in single directory "sources".
3-Then copy the board related files (Ex: Board.c, Board.h, gpio_pins.c, gpio_pins.h, pin_mux.c, pin_mux.h) from C:\Freescale\KSDK_1.2.0\examples\frdmk22f on the "sources" directory.
and modified the following files:
Board.c :
void BOARD_InitXCVR(void) //Added start point
{
gpio_output_pin_user_config_t xcvrResetPin =
{
.pinName = kGpioXcvrReset,
.config.outputLogic = 1,
.config.slewRate = kPortSlowSlewRate,
.config.driveStrength = kPortLowDriveStrength,
};
configure_xcvr_pins(0);
/* Reset XCVR */
GPIO_DRV_OutputPinInit(&xcvrResetPin);
GPIO_DRV_ClearPinOutput(kGpioXcvrReset);
GPIO_DRV_SetPinOutput(kGpioXcvrReset);
PORT_HAL_SetSlewRateMode(PORTD, 5, kPortSlowSlewRate);
}
// Added end point
void dbg_uart_init(void)
{
// configure_uart_pins(BOARD_DEBUG_UART_INSTANCE); //Commented
// DbgConsole_Init(BOARD_DEBUG_UART_INSTANCE, BOARD_DEBUG_UART_BAUD, kDebugConsoleUART); // Commented
}
int debug_printf(const char *fmt_s, …) //Function Added
{
return 0;
}
- Board.h :
#define BOARD_USE_DSPI 1
#define gXcvrSpiInstance_c 1 // Changed K22F use of SPI 1
#ifndef APP_SERIAL_INTERFACE_TYPE
#define APP_SERIAL_INTERFACE_TYPE (gSerialMgrUart_c)
#endif
#ifndef APP_SERIAL_INTERFACE_INSTANCE
#define APP_SERIAL_INTERFACE_INSTANCE (1)
#endif
/* Function to initialize the MCR20 XCVR */
void BOARD_InitXCVR(void);
gpio_pins.c :
gpio_input_pin_user_config_t switchPins[] = {
{
.pinName = kGpioSW1, // Added extra not available in K64F default
.config.isPullEnable = true,
.config.pullSelect = kPortPullUp,
.config.isPassiveFilterEnabled = false,
.config.interrupt = kPortIntFallingEdge // Changed in default file kPortIntDisabled
},
{
.pinName = kGpioSW4, // Added extra not available in k64f default file
.config.isPullEnable = true,
.config.pullSelect = kPortPullUp,
.config.isPassiveFilterEnabled = false,
.config.interrupt = kPortIntFallingEdge //Changed “kPortIntDisabled” with kPortIntFallingEdge
},
gpio_output_pin_user_config_t ledPins[] = {
{
.pinName = kGpioLED1,
.config.outputLogic = 1,
.config.slewRate = kPortSlowSlewRate,
.config.driveStrength = kPortHighDriveStrength, //Default kPortLOWDriveStrength
},
gpio_pins.h :
enum _gpio_pins_pinNames{ // added start point
/* FRDM-MCRR20A switches */ // K22F K64F
kGpioSW1 = GPIO_MAKE_PIN(GPIOA_IDX, 4U), // PTA4 <--PTB23
// kGpioSW2 = GPIO_MAKE_PIN(GPIOA_IDX, 1U),
/* FRDM-K64F switches */
// kGpioSW3 = GPIO_MAKE_PIN(GPIOC_IDX, 6U),
kGpioSW4 = GPIO_MAKE_PIN(GPIOA_IDX, 4U), // PTA4 -- NOT FOUND
// kGpioAccelINT1 = GPIO_MAKE_PIN(GPIOC_IDX, 6U), // PTC6 -- NOT FOUND
// kGpioAccelINT2 = GPIO_MAKE_PIN(GPIOC_IDX, 13U), //PTC13 -- NOT FOUND
// kGpioSdhc0Cd = GPIO_MAKE_PIN(GPIOE_IDX, 6U), //PTE6 -- NOT FOUND
/* FRDM-MCR20A LEDs */
// kGpioLED1 = GPIO_MAKE_PIN(GPIOC_IDX, 10U),
// kGpioLED2 = GPIO_MAKE_PIN(GPIOC_IDX, 11U),
// kGpioLED3 = GPIO_MAKE_PIN(GPIOB_IDX, 11U),
/* FRDM-MK64F LEDs */
// kGpioLED1 = GPIO_MAKE_PIN(GPIOE_IDX, 26U),
// kGpioLED2 = GPIO_MAKE_PIN(GPIOB_IDX, 22U),
// kGpioLED3 = GPIO_MAKE_PIN(GPIOB_IDX, 21U),
// kGpioUartDemoRX = GPIO_MAKE_PIN(GPIOB_IDX, 16), // NOT FOUND
kGpioSpi0Cs0 = GPIO_MAKE_PIN(GPIOD_IDX, 0),
kGpioSpi0Cs1 = GPIO_MAKE_PIN(GPIOD_IDX, 4),
/* SerialManager Data Available Pins */
kGpioSpiSlaveDAP = GPIO_MAKE_PIN(GPIOC_IDX, 3U), // PTC3 <-- PTC2
kGpioSpiMasterDAP = GPIO_MAKE_PIN(GPIOC_IDX, 3U),
kGpioI2cSlaveDAP = GPIO_MAKE_PIN(GPIOC_IDX, 3U),
kGpioI2cMasterDAP = GPIO_MAKE_PIN(GPIOC_IDX, 3U),
/* XCVR pins */
kGpioXcvrSpiMiso = GPIO_MAKE_PIN(GPIOD_IDX, 7), //PD7 <-- PD3
kGpioXcvrSpiMosi = GPIO_MAKE_PIN(GPIOD_IDX, 6),
kGpioXcvrSpiSck = GPIO_MAKE_PIN(GPIOD_IDX, 5),
kGpioXcvrSpiCs = GPIO_MAKE_PIN(GPIOD_IDX, 4),
kGpioXcvrReset = GPIO_MAKE_PIN(GPIOB_IDX, 18),
kGpioXcvrIrq = GPIO_MAKE_PIN(GPIOB_IDX, 16),
kGpioXcvrGpio3 = GPIO_MAKE_PIN(GPIOC_IDX, 6),
kGpioXcvrGpio4 = GPIO_MAKE_PIN(GPIOB_IDX, 19),
kGpioXcvrGpio5 = GPIO_MAKE_PIN(GPIOA_IDX, 1),
kGpioXcvrClkOut = GPIO_MAKE_PIN(GPIOE_IDX, 1) // ALL DONE
}; // added end point
pin_mux.c :
/************************** Commented existing functions *******************/
//void pin_mux_SPI(uint32_t instance)
//{
// switch(instance) {
// case 0: /* SPI0 */
// /* PORTD_PCR0 */
// /*PORT_HAL_SetMuxMode(PORTD,0u,kPortMuxAlt2);*/
// PORT_HAL_SetMuxMode(PORTC,4u,kPortMuxAlt2); /*** Temporary work around until next board spin. ***/
// /* PORTD_PCR3 */
// //PORT_HAL_SetMuxMode(PORTD,3u,kPortMuxAlt2);
// PORT_HAL_SetMuxMode(PORTC,5u,kPortMuxAlt2); /*** Temporary work around until next board spin. ***/
// /* PORTD_PCR1 */
// /*PORT_HAL_SetMuxMode(PORTD,1u,kPortMuxAlt2);*/
// PORT_HAL_SetMuxMode(PORTC,6u,kPortMuxAlt2); /*** Temporary work around until next board spin. ***/
// /* PORTD_PCR2 */
// /*PORT_HAL_SetMuxMode(PORTD,2u,kPortMuxAlt2);*/
// PORT_HAL_SetMuxMode(PORTC,7u,kPortMuxAlt2); /*** Temporary work around until next board spin. ***/
// break;
// case 1: /* SPI1 */
// /* PORTD_PCR4 */
// PORT_HAL_SetMuxMode(PORTD,4u,kPortMuxAlt7);
// /* PORTD_PCR5 */
// PORT_HAL_SetMuxMode(PORTD,5u,kPortMuxAlt7);
// /* PORTD_PCR6 */
// PORT_HAL_SetMuxMode(PORTD,6u,kPortMuxAlt7);
// /* PORTD_PCR7 */
// PORT_HAL_SetMuxMode(PORTD,7u,kPortMuxAlt7);
// break;
// default:
// break;
// }
//}
//
//void pin_mux_UART(uint32_t instance)
//{
// switch(instance) {
// case 1: /* UART1 BT */
// /* PORTE_PCR0 */
// PORT_HAL_SetMuxMode(PORTE,0u,kPortMuxAlt3);
// /* PORTE_PCR1 */
// PORT_HAL_SetMuxMode(PORTE,1u,kPortMuxAlt3);
// break;
// default:
// break;
// }
//}
//************************ Add Below Functions********************
void configure_spi_pins(uint32_t instance)
{
switch(instance) {
case SPI0_IDX: /* SPI0 */
/* Affects PORTD_PCR0 register */
PORT_HAL_SetMuxMode(PORTD,0u,kPortMuxAlt2);
/* Affects PORTD_PCR3 register */
PORT_HAL_SetMuxMode(PORTD,3u,kPortMuxAlt2);
/* Affects PORTD_PCR1 register */
PORT_HAL_SetMuxMode(PORTD,1u,kPortMuxAlt2);
/* Affects PORTD_PCR2 register */
PORT_HAL_SetMuxMode(PORTD,2u,kPortMuxAlt2);
break;
case SPI1_IDX: /* SPI1 */
/* Affects PORTD_PCR4 register */
PORT_HAL_SetMuxMode(PORTD,4u,kPortMuxAlt7);
/* Affects PORTD_PCR7 register */
PORT_HAL_SetMuxMode(PORTD,7u,kPortMuxAlt7);
/* Affects PORTD_PCR5 register */
PORT_HAL_SetMuxMode(PORTD,5u,kPortMuxAlt7);
/* Affects PORTD_PCR6 register */
PORT_HAL_SetMuxMode(PORTD,6u,kPortMuxAlt7);
break;
default:
break;
}
}
void configure_uart_pins(uint32_t instance)
{
switch(instance) {
case UART1_IDX: /* UART1 */ // changed as per k22f
/* Affects PORTB_PCR16 register */
PORT_HAL_SetMuxMode(PORTE,0u,kPortMuxAlt3); //PORT_HAL_SetMuxMode(PORTB,16u,kPortMuxAlt3);
/* Affects PORTB_PCR17 register */
PORT_HAL_SetMuxMode(PORTE,1u,kPortMuxAlt3); //PORT_HAL_SetMuxMode(PORTB,17u,kPortMuxAlt3);
break;
// case UART4_IDX: /* UART4 */ // Uart4 commented
// /* Affects PORTC_PCR14 register */
// PORT_HAL_SetMuxMode(PORTC,14u,kPortMuxAlt3);
// /* Affects PORTC_PCR15 register */
// PORT_HAL_SetMuxMode(PORTC,15u,kPortMuxAlt3);
// break;
default:
break;
}
}
void configure_xcvr_pins(uint32_t instance) // changes
{
PORT_HAL_SetMuxMode(PORTD, 7u, kPortMuxAsGpio); //PORT_HAL_SetMuxMode(PORTD, 3u, kPortMuxAsGpio);
PORT_HAL_SetMuxMode(PORTA, 5u, kPortMuxAsGpio); //We didn't found this pin for K22F
//PORT_HAL_SetMuxMode(PORTA, 5u, kPortMuxAsGpio);
}
// ********************** done ********************************
pin_mux.h :
void configure_xcvr_pins(uint32_t instance);
Linker changes :
Now, Add the below flag in linker in project setting.
-specs=nosys.specs -specs=nano.specs -Xlinker –defsym=__ram_vector_table__=1
We have tested it to run send and receive demo application and verified it.
If you can spare your some time to validate the changes/inputs then that would be the great help for us.
Thanks,
Sunil