⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gpio.c

📁 A few drivers for the Motorola C380 s celluar phone hardware with a simple test application. It s co
💻 C
字号:
/*
   Motorola LTE General Purpose Input Output Driver
   ----------------------------
   (c) motoprogger 2008
*/

#include "../libs/motolibs.h"
#include "gpio.h"

#define GPIO_BASE 0x24841000

typedef struct
{
        word config0;
        word config1;
        word DataDir;
        word IntMask;
        word IntCtl;
        word AltIn;
} GPIO_PORT_CONTROL;

#define GPIO_PORT_CTL_REGS ((volatile GPIO_PORT_CONTROL * ) (void * ) GPIO_BASE)
#define GPIO_INTERRUPT_SELECT_REG word_ptr(GPIO_BASE+0x78)
#define GPIO_INTERRUPT_STATUS_REG word_ptr(GPIO_BASE+0x7C)
#define GPIO_DATA_REGS ((word * ) (void * ) (GPIO_BASE+0x80))

void gpio_config(byte port, byte pin, byte dir, byte chan)
{
        volatile GPIO_PORT_CONTROL * port_ctl;
        word gpio_dir;
        word gpio_cfg;
        port_ctl=GPIO_PORT_CTL_REGS+port;
        if (dir==GPIO_DIR_IN)
        {
                gpio_cfg=port_ctl->AltIn&(~(3<<(2*pin)));
                port_ctl->AltIn=gpio_cfg|(chan<<(2*pin));
        }
        else if (dir==GPIO_DIR_OUT)
        {
                if (pin<10)
                {
                        gpio_cfg=port_ctl->config0&(~(7<<(3*pin)));
                        port_ctl->config0=gpio_cfg|(chan<<(3*pin));
                }
                else {
                        gpio_cfg=port_ctl->config1&(~(7<<(3*(pin-10))));
                        port_ctl->config1=gpio_cfg|(chan<<(3*(pin-10)));
                } 
        }
        else return;
        gpio_dir=port_ctl->DataDir&(~(1<<pin));
        port_ctl->DataDir=gpio_dir|(dir<<pin);
}

void gpio_write(byte port, byte pin, byte val)
{
        word gpio_data;
        gpio_data=GPIO_DATA_REGS[port]&(~(1<<pin));
        GPIO_DATA_REGS[port]=gpio_data|(val<<pin);
}

byte gpio_read(byte port, byte pin)
{
        return (GPIO_DATA_REGS[port]>>pin)&1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -