搜索
bottom↓
回复: 3

马老师新年好!请教一个M051 GPIO复用的问题

[复制链接]

出100入0汤圆

发表于 2011-1-30 20:25:05 | 显示全部楼层 |阅读模式
我用新唐送的开发板,测试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, &param);                   //初始化串口

    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周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-1-30 23:55:58 | 显示全部楼层
尽管我多次建议大家要认真看手册,要先注意和使用寄存器,总是有人反对。

M051说是“替代”8051,这个替代实际是颠覆性的。8051对I/O口控制的寄存器有几个?而M051针对I/O的寄存器就有10几个,功能多的要死。其它的硬件接口就不要谈了,一个UART复杂了N倍。

什么有了8051的基础,使用库,几天内就能掌握M051,那是骗人的鬼话。

要想真正掌握MCU的使用,先扔掉哪个“库”吧。

对于LZ的问题,我提供你查看手册,关注下面的寄存器:

P0_MFP  GCR_BA+0x30  R/W  P0 multiple function and input type control register  0x0000_0000
P1_MFP  GCR_BA+0x34  R/W  P1 multiple function and input type control register  0x0000_0000
P2_MFP  GCR_BA+0x38  R/W  P2 multiple function and input type control register  0x0000_0000
P3_MFP  GCR_BA+0x3C  R/W  P3 multiple function and input type control register  0x0000_0000
P4_MFP  GCR_BA+0x40  R/W  P4 input type control register  0x0000_00C0

出0入0汤圆

发表于 2011-1-31 11:52:18 | 显示全部楼层
谢谢马老师!您说的对。我也意识到不能浮躁,要沉下心去看资料。在昨晚我也找到了这几个寄存器,今天不用库直接设置寄存器看看。再次感谢马老师!

出0入0汤圆

发表于 2011-7-4 20:14:39 | 显示全部楼层
顶一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-19 06:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表