zoukankan      html  css  js  c++  java
  • 龙芯应用层mmap映射寄存器地址

    以操作龙芯派为例,龙芯派2代 GPIO39为峰鸣器控制引脚

    linux系统下通过info命令查看mmap使用:
    	info mmap
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include <unistd.h> 
    #include <sys/mman.h>
    
    #define MAP_SIZE        0x10000
    #define AUDIO_REG_BASE  0x1fe10000
    
    #define GPIO_EN         0x500
    #define GPIO_OUT        0x510
    #define GPIO_IN         0x520
    
    //控制GPIO39
    #define GPIO_PIN        39
    
    int main(int argc, char **argv)
    {
        int i;
        int dev_fd, offset, gpio_move;
        dev_fd = open("/dev/mem", O_RDWR | O_SYNC);      
    
        if (dev_fd < 0)  
        {
            printf("open(/dev/mem) failed.");    
            return -1;
        }  
    
        unsigned char *map_base=(unsigned char * )mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, dev_fd, AUDIO_REG_BASE );
    
    //    printf("%x 
    ", *(volatile unsigned int *)(map_base + GPIO_EN)); //打印该寄存器地址的value
        
        if(GPIO_PIN > 31) {
            offset = 4;
            gpio_move = GPIO_PIN - 32;
        } else {
            offset = 0;
            gpio_move = GPIO_PIN;
        }
    
        *(volatile unsigned int *)(map_base + GPIO_EN + offset) &= ~(1<<gpio_move);         //GPIO输出使能
    
        for(i=0;i<5000;i++) {
            *(volatile unsigned int *)(map_base + GPIO_OUT + offset) |= (1<<gpio_move);     //输出高
            usleep(370);
            *(volatile unsigned int *)(map_base + GPIO_OUT + offset) &= ~(1<<gpio_move);    //输出底
            usleep(370);
        }
    
        munmap(map_base,MAP_SIZE);//解除映射关系
    
        if(dev_fd)
            close(dev_fd);
    
        return 0;
    }

    -

  • 相关阅读:
    文件数据分析制作过程【1】
    VBA学习(4)
    QTP9.2 .net与java插件破解
    GPRS开发系列文章之实战篇
    time_t到.NET的转换
    RAS函数
    GPRS开发系列文章之入门篇
    [转]惹恼程序员的十件事
    好玩和可爱的网站
    GPRS开发系列文章之进阶篇
  • 原文地址:https://www.cnblogs.com/Ph-one/p/13649780.html
Copyright © 2011-2022 走看看