Цитата
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#define PIO_BASE 0x0x00001400
volatile unsigned int *CPDATD; //PortD data register
volatile unsigned int *CPDIR2D; //PortD datadirection2 register
int main (void)
{
//long delay=128000, delay2=100;
unsigned char *gpio;
int fd;
fd = open("/dev/mem", O_RDWR);
if (fd < 0){
printf("Failed to open /dev/mem");
return fd;
}
gpio = mmap(0, getpagesize(), PROT_READ|PROT_WRITE, MAP_SHARED, fd, PIO_BASE);
CPDATD = (unsigned int *)(gpio + 0x4C); //data
CPDIR2D = (unsigned int *)(gpio + 0x54);
*CPDIR2D |= 0x02;//set output
*CPDATD ^= (1 << 16);// turn ON Red LED (port D16)
return 0;
}
Вот такую програмку накатал...В даташите на mpc8323e есть адресс:
0x00_1400–0x00_17FF QUICC Engine parallel I/O ports 168 bytes 1 Kbyte
Вот только запускаю и выдает Segmentation fault... причем ругается когда я записываю что то в память...
*CPDIR2D |= 0x02;//set output
*CPDATD ^= (1 << 16);// turn ON Red LED (port D16)
На эти две строчки... Есть смутное сомнение, что адресс из даташита не имеет никакого отношения к памяти линукса...
Она распределяет как ей удобней... в исходниках кернела не нашел адресса для I/O... такое ощущение что в этой сборке зажечь светик тупо невозможно
Сообщение отредактировал Славка - Apr 9 2010, 09:44