请选择 进入手机版 | 继续访问电脑版
[X]关闭

LED字符驱动程序EMIO基地址

文档创建者:人来人往
浏览次数:8719
最后更新:2020-07-28
 
本帖最后由 人来人往 于 2020-6-20 11:18 编辑

请问我在学习“CH12_LED字符驱动程序,mp4”时,LED的Base Adress是0x41200000,请问这个值是从哪里找到的呢?UG585里面没有看到呢?(我只看到Vivado工程中,有一个AXI—GPIO地址是0x41200000,但是我驱动的编写并没有涉及到Vivado工程)。
        //地址映射:把物理地址转换为虚拟地址
       led_base = ioremap(0x41200000, 4);
        printk("LED: Access address to device is:0x%x\n", (unsigned int)led_base);

另外,我在UG585上面看MIO基地址,以及MIO设置input/output、Dir、Enble等寄存器的移位地址,但是操作写1,不能点亮相应MIO的LED(如MIO7对应的LD9指示灯)。
//MIO基地址
#define GPIO_BASE_Address 0xe000a000
volatile unsigned int *mask_data_lsw;        //屏蔽输出低16bit
#define MASK_DATA_0_LSW   0X00000000
volatile unsigned int *mask_data_msw;        //屏蔽输出高16bit
#define MASK_DATA_0_MSW   0X00000004
volatile unsigned int *data;                        //输出数据
#define DATA_0            0X00000040
volatile unsigned int *dirm;                        //配置I/O口方向
#define DIRM_0            0X00000204
volatile unsigned int *oen;                                //输出使能
#define OEN_0             0X00000208
volatile unsigned int *clk;                                //时钟地址
#define CLK_ADDR          0XF800012C
volatile unsigned int *led_base;


static int board_demo_led_init (int which) /* 初始化LED, which-哪个LED */           
{               
        mask_data_lsw = ioremap(GPIO_BASE_Address+MASK_DATA_0_LSW,4);        //BANK0 低16bit
        mask_data_msw = ioremap(GPIO_BASE_Address+MASK_DATA_0_MSW,4);        //BANK0 高16bit
        data                  = ioremap(GPIO_BASE_Address+DATA_0,4);
        dirm                  = ioremap(GPIO_BASE_Address+DIRM_0,4);
        oen                   = ioremap(GPIO_BASE_Address+OEN_0,4);
        clk                   = ioremap(CLK_ADDR,4);//时钟默认打开,可以不用管啦
        led_base           = ioremap(0x41200000, 4);
        
        iowrite32(0xffffff7f,mask_data_lsw);         // 7f : 0111 1111 ==> MIO7
        iowrite32(0xffffff7f,mask_data_msw);
        iowrite32(0x00000080,dirm);                        // 0x80 : 1000 0000 ==> MIO7
        iowrite32(0x00000080,oen);
        printk("which = %d" , which);
        printk("LED init");
        return 0;

}

static int board_demo_led_ctl (int which, char status) /* 控制LED, which-哪个LED, status:1-亮,0-灭 */
{
        if (which == 0)
        {
                if (status) /* on: output 0 */
                {
                        iowrite32(1,led_base);
                        printk("LED ON!") ;
                }
                else
                {
                        iowrite32(0,led_base);
                        printk("LED OFF!") ;
                }
        }
        return 0;
}
希望有大佬可以解惑。万分感谢~~

发表评论已发布 9

ぉ沙皮狗的忧伤

发表于 2020-6-23 14:38:23 | 显示全部楼层

你可以去查看我的帖子,有EMIO的分享,如果觉得还是不明白,可以来咨询我

人来人往

发表于 2020-6-24 17:17:08 | 显示全部楼层

ぉ沙皮狗的忧伤 发表于 2020-6-23 14:38
你可以去查看我的帖子,有EMIO的分享,如果觉得还是不明白,可以来咨询我

你好,感谢回复。
EMIO我测试了下是可以操作的。只是我不知道那个0x41200000是怎么来的。
另外,MIO我不能操作,想请教一下方法。谢谢

ぉ沙皮狗的忧伤

发表于 2020-6-28 09:33:35 | 显示全部楼层

人来人往 发表于 2020-6-24 17:17
你好,感谢回复。
EMIO我测试了下是可以操作的。只是我不知道那个0x41200000是怎么来的。
另外,MIO我 ...

我帖子里面也有,你去看一下

人来人往

发表于 2020-6-29 21:14:54 | 显示全部楼层

ぉ沙皮狗的忧伤 发表于 2020-6-28 09:33
我帖子里面也有,你去看一下

你好,可以贴个地址吗?
我去你主页看了,没找到有操作MIO的帖子~~~。
谢谢

ぉ沙皮狗的忧伤

发表于 2020-6-30 11:29:55 | 显示全部楼层

人来人往 发表于 2020-6-29 21:14
你好,可以贴个地址吗?
我去你主页看了,没找到有操作MIO的帖子~~~。
谢谢

自己找,找都不找就说没有

人来人往

发表于 2020-7-7 11:01:09 | 显示全部楼层

因为以前只学过FPGA,没学过ARM,所以在zynq写内核驱动这块遇到很多问题,上周看了韦东山老师的设备树视频,改了设备树文件,终于把问题解决了,有遇到相同问题的可以私我。不怕别人说我做广告,有学zynq不知道怎么入手的,建议先学习ARM。

人来人往

发表于 2020-7-7 11:07:15 | 显示全部楼层

ぉ沙皮狗的忧伤 发表于 2020-6-30 11:29
自己找,找都不找就说没有

大哥,我也敢肯定您也没浪费时间看我帖子的问题。。。
那啥,我也是遇到问题求助的,您知道原因告诉我帮我,我感谢哈。您主页没我要的资料,不浪费时间了哈~~

ぉ沙皮狗的忧伤

发表于 2020-7-28 11:25:32 | 显示全部楼层

那我们就来看一下这篇帖子的问题
截图202007281119488144..png
首先来看一下0x41200000这个寄存器的地址
下面这个帖子是通过axi_gpio IP核去控制LED灯
https://www.uisrc.com/forum.php?mod=viewthread&tid=2531&extra=

截图202007281120224772..png
截图202007281120471934..png

看到这里,相信大家都已经明白了,这就是AXI_GPIO_0和AXI_GPIO_1在PS端接口的地址,并不是GPIO的基地址


他下面对GPIO寄存器操作是无用的
截图202007281121237993..png

正确的操作方法,其实很简单
①先映射接口地址
截图202007281122251459..png

②应用层往底层写值就可以了

截图202007281121491578..png
③内核驱动获取应用层传下来的值,写入到映射地址中,实现通过axi接口点fpga端的LED灯
截图202007281122556620..png

https://www.uisrc.com/forum.php?mod=viewthread&tid=2527&extra=




下面来说一下怎么通过寄存器正确操作MIO或者EMIO

先了解寄存,在配置,可以参考的配置过程
https://www.uisrc.com/forum.php?mod=viewthread&tid=2564&extra=

截图202007281125034052..png

ぉ沙皮狗的忧伤

发表于 2020-7-28 11:28:13 | 显示全部楼层

人来人往 发表于 2020-7-7 11:07
大哥,我也敢肯定您也没浪费时间看我帖子的问题。。。
那啥,我也是遇到问题求助的,您知道原因告诉我帮 ...

本来不想回复你,下面是我在我的帖子里面找到的,希望你不要在浪费大家的时间了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则