人来人往 发表于 2020-6-19 15:58:13

LED字符驱动程序EMIO基地址

本帖最后由 人来人往 于 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;
}
希望有大佬可以解惑。万分感谢~~

ぉ沙皮狗的忧伤 发表于 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

那我们就来看一下这篇帖子的问题

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




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


他下面对GPIO寄存器操作是无用的


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


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


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


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




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

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


ぉ沙皮狗的忧伤 发表于 2020-7-28 11:28:13

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

本来不想回复你,下面是我在我的帖子里面找到的,希望你不要在浪费大家的时间了
页: [1]
查看完整版本: LED字符驱动程序EMIO基地址