本帖最后由 汉云 于 2017-5-19 22:39 编辑
前面,我们搭建好了LPCXpresso
的开发环境,
基本上每个工程翥有一个调试串口,其初始化函数在DEBUGINIT();
中。而其为一个宏定义,指向函数Board_Debug_Init()
Board_Debug_Init()
函数的源码为:void Board_Debug_Init(void)
{
#if defined(DEBUG_UART)
Board_UART_Init();
Chip_UART_Init(DEBUG_UART);
Chip_UART_ConfigData(DEBUG_UART, UART_CFG_DATALEN_8 | UART_CFG_PARITY_NONE | UART_CFG_STOPLEN_1);
Chip_Clock_SetUSARTNBaseClockRate((115200 * 16), true);
Chip_UART_SetBaud(DEBUG_UART, 115200);
Chip_UART_Enable(DEBUG_UART);
Chip_UART_TXEnable(DEBUG_UART);
#endif
}
Board_UART_Init();
函数中是对GPIO
的初始化。
STATIC void Board_UART_Init(void)
{
Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM);
Chip_SWM_DisableFixedPin(SWM_FIXED_ADC8);
Chip_SWM_DisableFixedPin(SWM_FIXED_ADC9);
Chip_Clock_SetUARTClockDiv(1);
if (DEBUG_UART == LPC_USART0) {
Chip_SWM_MovablePinAssign(SWM_U0_TXD_O, 7);
Chip_SWM_MovablePinAssign(SWM_U0_RXD_I, 18);
} else if (DEBUG_UART == LPC_USART1) {
Chip_SWM_MovablePinAssign(SWM_U1_TXD_O, 7);
Chip_SWM_MovablePinAssign(SWM_U1_RXD_I, 18);
} else {
Chip_SWM_MovablePinAssign(SWM_U2_TXD_O, 7);
Chip_SWM_MovablePinAssign(SWM_U2_RXD_I, 18);
}
Chip_Clock_DisablePeriphClock(SYSCTL_CLOCK_SWM);
}
这里要用到了,所以要先使能switch matrix时钟: Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM);通过PINENABLE0寄存器,禁用ADC8、ADC9引脚的ADC功能。Chip_SWM_DisableFixedPin(SWM_FIXED_ADC8); Chip_SWM_DisableFixedPin(SWM_FIXED_ADC9);
由下面定义,串口使用的是串口1#defineDEBUG_UART LPC_USART1
通过PINASSIGN1,
寄存器,将对串口的引脚进行绑定。
void Chip_SWM_MovablePinAssign(CHIP_SWM_PIN_MOVABLE_T movable, uint8_t pin)
{
uint32_t temp;
int pinshift = PINSHIFT(movable), regIndex = PINASSIGN_IDX(movable);
temp = LPC_SWM->PINASSIGN & (~(0xFF << pinshift));
LPC_SWM->PINASSIGN = temp | (pin << pinshift);
}
如上图,TXD
与RXD
两个引脚对应的是第8-15
位与16-23
位,也就是引脚号要左移8
位与16
位,那么这也就是Chip_SWM_MovablePinAssign
函数的第一个参数通过两个宏定义产生的寄存器偏移(regIndex
)与数据位偏移(pinshift)
。而第二个参数则对应了引脚的编号了。也就是串口1
使用了P0_7
与P0_18
了,那么连接P0_7
与P0_18
到串口转换板,接232
到PC
电脑上。如下是串口的输出
本帖最后由 汉云 于 2017-5-19 22:39 编辑
前面,我们搭建好了LPCXpresso
的开发环境,
基本上每个工程翥有一个调试串口,其初始化函数在DEBUGINIT();
中。而其为一个宏定义,指向函数Board_Debug_Init()
Board_Debug_Init()
函数的源码为:void Board_Debug_Init(void)
{
#if defined(DEBUG_UART)
Board_UART_Init();
Chip_UART_Init(DEBUG_UART);
Chip_UART_ConfigData(DEBUG_UART, UART_CFG_DATALEN_8 | UART_CFG_PARITY_NONE | UART_CFG_STOPLEN_1);
Chip_Clock_SetUSARTNBaseClockRate((115200 * 16), true);
Chip_UART_SetBaud(DEBUG_UART, 115200);
Chip_UART_Enable(DEBUG_UART);
Chip_UART_TXEnable(DEBUG_UART);
#endif
}
Board_UART_Init();
函数中是对GPIO
的初始化。
STATIC void Board_UART_Init(void)
{
Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM);
Chip_SWM_DisableFixedPin(SWM_FIXED_ADC8);
Chip_SWM_DisableFixedPin(SWM_FIXED_ADC9);
Chip_Clock_SetUARTClockDiv(1);
if (DEBUG_UART == LPC_USART0) {
Chip_SWM_MovablePinAssign(SWM_U0_TXD_O, 7);
Chip_SWM_MovablePinAssign(SWM_U0_RXD_I, 18);
} else if (DEBUG_UART == LPC_USART1) {
Chip_SWM_MovablePinAssign(SWM_U1_TXD_O, 7);
Chip_SWM_MovablePinAssign(SWM_U1_RXD_I, 18);
} else {
Chip_SWM_MovablePinAssign(SWM_U2_TXD_O, 7);
Chip_SWM_MovablePinAssign(SWM_U2_RXD_I, 18);
}
Chip_Clock_DisablePeriphClock(SYSCTL_CLOCK_SWM);
}
这里要用到了,所以要先使能switch matrix时钟: Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM);通过PINENABLE0寄存器,禁用ADC8、ADC9引脚的ADC功能。Chip_SWM_DisableFixedPin(SWM_FIXED_ADC8); Chip_SWM_DisableFixedPin(SWM_FIXED_ADC9);
由下面定义,串口使用的是串口1#defineDEBUG_UART LPC_USART1
通过PINASSIGN1,
寄存器,将对串口的引脚进行绑定。
void Chip_SWM_MovablePinAssign(CHIP_SWM_PIN_MOVABLE_T movable, uint8_t pin)
{
uint32_t temp;
int pinshift = PINSHIFT(movable), regIndex = PINASSIGN_IDX(movable);
temp = LPC_SWM->PINASSIGN & (~(0xFF << pinshift));
LPC_SWM->PINASSIGN = temp | (pin << pinshift);
}
如上图,TXD
与RXD
两个引脚对应的是第8-15
位与16-23
位,也就是引脚号要左移8
位与16
位,那么这也就是Chip_SWM_MovablePinAssign
函数的第一个参数通过两个宏定义产生的寄存器偏移(regIndex
)与数据位偏移(pinshift)
。而第二个参数则对应了引脚的编号了。也就是串口1
使用了P0_7
与P0_18
了,那么连接P0_7
与P0_18
到串口转换板,接232
到PC
电脑上。如下是串口的输出