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;
}
希望有大佬可以解惑。万分感谢~~
你可以去查看我的帖子,有EMIO的分享,如果觉得还是不明白,可以来咨询我
ぉ沙皮狗的忧伤 发表于 2020-6-23 14:38
你可以去查看我的帖子,有EMIO的分享,如果觉得还是不明白,可以来咨询我
你好,感谢回复。
EMIO我测试了下是可以操作的。只是我不知道那个0x41200000是怎么来的。
另外,MIO我不能操作,想请教一下方法。谢谢 人来人往 发表于 2020-6-24 17:17
你好,感谢回复。
EMIO我测试了下是可以操作的。只是我不知道那个0x41200000是怎么来的。
另外,MIO我 ...
我帖子里面也有,你去看一下
ぉ沙皮狗的忧伤 发表于 2020-6-28 09:33
我帖子里面也有,你去看一下
你好,可以贴个地址吗?
我去你主页看了,没找到有操作MIO的帖子~~~。
谢谢 人来人往 发表于 2020-6-29 21:14
你好,可以贴个地址吗?
我去你主页看了,没找到有操作MIO的帖子~~~。
谢谢
自己找,找都不找就说没有 因为以前只学过FPGA,没学过ARM,所以在zynq写内核驱动这块遇到很多问题,上周看了韦东山老师的设备树视频,改了设备树文件,终于把问题解决了,有遇到相同问题的可以私我。不怕别人说我做广告,有学zynq不知道怎么入手的,建议先学习ARM。 ぉ沙皮狗的忧伤 发表于 2020-6-30 11:29
自己找,找都不找就说没有
大哥,我也敢肯定您也没浪费时间看我帖子的问题。。。
那啥,我也是遇到问题求助的,您知道原因告诉我帮我,我感谢哈。您主页没我要的资料,不浪费时间了哈~~ 那我们就来看一下这篇帖子的问题
首先来看一下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-7 11:07
大哥,我也敢肯定您也没浪费时间看我帖子的问题。。。
那啥,我也是遇到问题求助的,您知道原因告诉我帮 ...
本来不想回复你,下面是我在我的帖子里面找到的,希望你不要在浪费大家的时间了
页:
[1]