F5OEO-rpidatv/src/rpigpio.c

98 wiersze
2.2 KiB
C

#include "rpigpio.h"
#include "mailbox.h"
#include "raspberry_pi_revision.h"
static volatile unsigned int BCM2708_PERI_BASE;
static uint32_t dram_phys_base;
char InitGpio()
{
int rev, mem, maker, overVolted ;
//printf("*********** Init GPIO *************\n");
RASPBERRY_PI_INFO_T info;
if (getRaspberryPiInformation(&info) > 0)
{
if(info.peripheralBase==RPI_BROADCOM_2835_PERIPHERAL_BASE)
{
BCM2708_PERI_BASE = info.peripheralBase ;
dram_phys_base = 0x40000000;
mem_flag = 0x0c;
}
if((info.peripheralBase==RPI_BROADCOM_2836_PERIPHERAL_BASE)||(info.peripheralBase==RPI_BROADCOM_2837_PERIPHERAL_BASE))
{
BCM2708_PERI_BASE = info.peripheralBase ;
dram_phys_base = 0xc0000000;
mem_flag = 0x04;
}
}
DisplayInfo();
dma_reg = map_peripheral(DMA_BASE, DMA_LEN);
pwm_reg = map_peripheral(PWM_BASE, PWM_LEN);
clk_reg = map_peripheral(CLK_BASE, CLK_LEN);
pcm_reg = map_peripheral(PCM_BASE, PCM_LEN);
gpio_reg = map_peripheral(GPIO_BASE, GPIO_LEN);
pad_gpios_reg = map_peripheral(PADS_GPIO, PADS_GPIO_LEN);
return 1;
}
void * map_peripheral(uint32_t base, uint32_t len)
{
void * vaddr;
vaddr=mapmem(base,len);
//printf("Vaddr =%lx \n",vaddr);
return vaddr;
}
int gpioSetMode(unsigned gpio, unsigned mode)
{
int reg, shift;
reg = gpio/10;
shift = (gpio%10) * 3;
gpio_reg[reg] = (gpio_reg[reg] & ~(7<<shift)) | (mode<<shift);
return 0;
}
void DisplayInfo()
{
RASPBERRY_PI_INFO_T info;
if (getRaspberryPiInformation(&info) > 0)
{
printf("memory: %s\n", raspberryPiMemoryToString(info.memory));
printf("processor: %s\n",
raspberryPiProcessorToString(info.processor));
printf("i2cDevice: %s\n",
raspberryPiI2CDeviceToString(info.i2cDevice));
printf("model: %s\n",
raspberryPiModelToString(info.model));
printf("manufacturer: %s\n",
raspberryPiManufacturerToString(info.manufacturer));
printf("pcb revision: %d\n", info.pcbRevision);
printf("warranty void: %s\n", (info.warrantyBit) ? "yes" : "no");
printf("revision: %04x\n", info.revisionNumber);
printf("peripheral base: 0x%x\n", info.peripheralBase);
}
}