继续上一节的内容,学习串口通信。MC3172单片机,可以配置12个串口,四个IO一组,在组内串口的输入输出可以任意配置,非常灵活,和FPGA很相似。串口的基本知识不做介绍。
本次串口选择第7组,选择线程组2,使用了内部的高速RC振荡器(192M),在上个试验的基础上,将采集的直流电压通过串口发送出去,串口波特率设置为921600.
void GPCOM_UART(u32 gpcom_sel)
{
//时钟设置,
INTDEV_SET_CLK_RST(gpcom_sel,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV4));
//配置串口接收为P2,也可以配置为其他引脚
GPCOM_SET_IN_PORT(gpcom_sel,(GPCOM_RXD_IS_P2));
//配置串口发送为P0,也可以配置为其他引脚
GPCOM_SET_OUT_PORT(gpcom_sel,( \
GPCOM_P1_OUTPUT_DISABLE |GPCOM_P0_OUTPUT_ENABLE|GPCOM_P2_OUTPUT_DISABLE|GPCOM_P3_OUTPUT_DISABLE| \
GPCOM_P1_IS_HIGH |GPCOM_P0_IS_TXD |GPCOM_P2_IS_HIGH |GPCOM_P3_IS_HIGH \
));
GPCOM_SET_COM_MODE(gpcom_sel,GPCOM_UART_MODE);
GPCOM_SET_COM_SPEED(gpcom_sel,48000000,921600);//192/4=48M
//管角映射,要记得修改,与上面的设置相同。
GPCOM_SET_OVERRIDE_GPIO(gpcom_sel, ( \
GPCOM_P2_OVERRIDE_GPIO|GPCOM_P2_INPUT_ENABLE | \
GPCOM_P0_OVERRIDE_GPIO \
));
}
void thread2_main(void)
{
u8 send_data;
GPCOM_UART(GPCOM7_BASE_ADDR);
while(1){
while(GPCOM_TX_FIFO_FULL(GPCOM7_BASE_ADDR));
GPCOM_PUSH_TX_DATA(GPCOM7_BASE_ADDR,0xAA);
GPCOM_PUSH_TX_DATA(GPCOM7_BASE_ADDR,0x66);
send_data = delay>>8;
GPCOM_PUSH_TX_DATA(GPCOM7_BASE_ADDR,send_data);
send_data = delay & 0xff;
GPCOM_PUSH_TX_DATA(GPCOM7_BASE_ADDR,send_data);
GPCOM_PUSH_TX_DATA(GPCOM7_BASE_ADDR,0x55);
delay_us(1000000);
}
thread_end();
}
转动旋钮,电压从小到大,在从大到小。