[技术问答] 高分速求,新唐m05x系列gpio如何设置成上拉输入?它支持吗?

[复制链接]
2930|8
 楼主| sedatefire 发表于 2014-3-5 21:18 | 显示全部楼层 |阅读模式
本帖最后由 sedatefire 于 2014-3-5 21:23 编辑

typedef  volatile unsigned long *  P_V_UINT32;
typedef struct
{
    P_V_UINT32 port_pmd;
    P_V_UINT32 pin;
    uint32_t   pmd_msk;
    uint32_t   out_msk;
}IO_TYPE;
static const IO_TYPE IO_TAB[] =
{
    {  &P3_PMD, /*k0*/ &P32_DOUT,  Px2_PMD, Px2_OUT },
    {  &P2_PMD, /*k1*/ &P24_DOUT,  Px4_PMD, Px4_OUT },
    {  &P0_PMD, /*k2*/ &P07_DOUT,  Px7_PMD, Px7_OUT },
    {  &P0_PMD, /*k3*/ &P06_DOUT,  Px6_PMD, Px6_OUT },
    {  &P0_PMD, /*k4*/ &P05_DOUT,  Px5_PMD, Px5_OUT },
    {  &P0_PMD, /*k5*/ &P04_DOUT,  Px4_PMD, Px4_OUT },
    {  &P0_PMD, /*k6*/ &P01_DOUT,  Px1_PMD, Px1_OUT },
    {  &P0_PMD, /*k7*/ &P00_DOUT,  Px0_PMD, Px0_OUT },
    {  &P1_PMD, /*k8*/ &P10_DOUT,  Px0_PMD, Px0_OUT },
    {  &P1_PMD, /*k9*/ &P14_DOUT,  Px4_PMD, Px4_OUT },
};
void set_input_enable(IO_TYPE const *p)
{
    *p->port_pmd &= (~(p->pmd_msk));
    *p->pin      = 1; /* 上拉输入 */
}

 楼主| sedatefire 发表于 2014-3-5 21:18 | 显示全部楼层
我这样的操作方式对吗?
感觉有些不给力啊
 楼主| sedatefire 发表于 2014-3-5 21:20 | 显示全部楼层
这是新唐的reg库定义,它的gpio支持内部上拉吗?
#define GP_BA           0x50004000UL
#define P2_PMD                     (*((volatile unsigned long *) (GP_BA+0x00000080)))
#define P24_DOUT                (*((volatile unsigned long *) (GP_BA+0x00000250)))
 楼主| sedatefire 发表于 2014-3-5 21:22 | 显示全部楼层
在线等啊,50分啊
我感觉代码上已经无懈可击了,实在想不出还能怎么搞。
问题是硬件不在我旁边,不然拿示波器来捅看看就知道了。
研发之声 发表于 2014-3-5 22:29 | 显示全部楼层
缥缈九哥(14131338)  22:19:42
上拉输入 是准双向 口
写1打开弱上拉。
sedatefire(151358166)  22:20:31
设置成 准双向口 然后置1 ?

John Lee<j.y.lee@yeah.net>  22:21:36
准双向口就是弱上拉了。
没有上拉的是开漏。
研发之声 发表于 2014-3-5 22:29 | 显示全部楼层
我来领分了
研发之声 发表于 2014-3-5 22:30 | 显示全部楼层
设置为准双向口,默认就是上拉输入了
niuyaliang 发表于 2014-3-6 08:19 | 显示全部楼层
图像 001.png

准双向默认弱上拉,从51就是这么干的
clyu 发表于 2014-3-6 15:39 | 显示全部楼层
感觉楼主的code,怪怪的。如果需要I/O能input和output又要用内部上拉的话,就设为Quasi-Mode,就是准双向。输入时,让相应bit输出high,就OK了。
另外,每根IO有独立的GPIOA/B/C/D xxx寄存器,这样在控制某个bit时,不需要读DOUT寄存器出来,例如:只要直接写GPIOA0寄存器就可以修改PA.0的输出,写GPIOA1就可以修改PA.1的输出。
而pin寄存器是只读的,用来查看IO脚当前的状态,当然GPIOA0这种寄存器,如果读的话反应的也是IO的当前状态
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我为我自己代言... 链接:一线研发之声系列汇集 链接:Sedatefire的笔记 我发心,待人

4393

主题

5935

帖子

34

粉丝
快速回复 在线客服 返回列表 返回顶部