打印
[技术问答]

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

[复制链接]
2145|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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分啊
我感觉代码上已经无懈可击了,实在想不出还能怎么搞。
问题是硬件不在我旁边,不然拿示波器来捅看看就知道了。

使用特权

评论回复
5
研发之声| | 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
准双向口就是弱上拉了。
没有上拉的是开漏。

使用特权

评论回复
6
研发之声| | 2014-3-5 22:29 | 只看该作者
我来领分了

使用特权

评论回复
7
研发之声| | 2014-3-5 22:30 | 只看该作者
设置为准双向口,默认就是上拉输入了

使用特权

评论回复
8
niuyaliang| | 2014-3-6 08:19 | 只看该作者


准双向默认弱上拉,从51就是这么干的

使用特权

评论回复
9
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的笔记 我发心,待人

4392

主题

5934

帖子

32

粉丝