|
我用新唐送的开发板,测试GPIO时发现:
1.只要使能了UART0,则P0.2(CTS0)和P0.3(RTS0)就一直为高电平。无法作为通用输出口置低。
2.只要使能了定时器TIMER0,则P1.0(T2)和P1.1(T3)就一直为高电平。无法作为通用输出口置低。
程序如下:
#include <stdio.h>
#include "Driver/DrvTIMER.h"
#include "Driver/DrvGPIO.h"
#include "Driver/DrvSYS.h"
#include "Driver/DrvUART.h"
int main(void)
{
STR_UART_T param;
UNLOCKREG(x); //解锁寄存器
DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1); //使能外部12M时钟源
while (DrvSYS_GetChipClockSourceStatus(E_SYS_XTL12M) != 1); //等待外部12M时钟源建立
DrvSYS_SelectHCLKSource(0); //HCLK也选择外部12M时钟源
DrvSYS_SetClockDivider(E_SYS_HCLK_DIV, 0); //HCLK频率
DrvGPIO_InitFunction(E_FUNC_UART0); //初始化串口引脚
DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC,0); //串口时钟源选择外部12M
param.u32BaudRate = 57600; //Baudrate = 57600 bit/s
param.u8cDataBits = DRVUART_DATABITS_8; //8数据位
param.u8cStopBits = DRVUART_STOPBITS_1; //1停止位
param.u8cParity = DRVUART_PARITY_NONE; //无奇偶校验
param.u8cRxTriggerLevel = DRVUART_FIFO_1BYTES;
param.u8TimeOut = 0;
DrvUART_Open(UART_PORT0, ¶m); //初始化串口
DrvTIMER_Init();
DrvSYS_SelectIPClockSource(E_SYS_TMR0_CLKSRC, 0); //TMR0的时钟源选择:外部12MHz 晶振
DrvTIMER_Open(E_TMR0, 100, E_PERIODIC_MODE);
DrvTIMER_SetTimerEvent(E_TMR0, 10, (TIMER_CALLBACK)TMR0_CallbackFunction, 1);
DrvTIMER_EnableInt(E_TMR0); //使能TMR0中断
DrvTIMER_Start(E_TMR0); //启动Timer0
GPIO_Init(); //初始化GPIO
while(1)
{
DrvGPIO_SetPortBits (E_PORT0, 0x00); //P0口置全低(但结果P0.2和P0.3一直为高)
DrvGPIO_SetPortBits (E_PORT1, 0x00); //P1口置全低(但结果P1.0和P1.1一直为高)
}
}
可能是还应该对这几位复用的端口进行设置,但我没找到。
请马老师和各位高手指教,谢谢! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|