реклама на сайте
подробности

 
 
> Как зажечь светик на mpc8323e-rdb
Славка
сообщение Apr 8 2010, 09:00
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 6-04-10
Пользователь №: 56 441



Есть у меня сабжевый кит с линукс на борту. На нем есть 3 светика r y b подключенные к портам GPIO 416,417,418...
Ясен пень нужно на эти порты записать 0, и они зажгуться... начал с поиска как пользоваться GPIO...
http://www.mjmwired.net/kernel/Documentation/gpio.txt
посмотрел в /dev/ и не нашел модуля gpio... попробовал ~modprobe gpio результат FATAL: Module gpio not found.
есть ли другой способ их зажечь?? если нет, то как поставить этот модуль... хотя бы ссылку где взять
и как ставятся модули в линукс...
линукс собирался в Ltib с диска к киту...
Linux version 2.6.20.6 (r43496@ont06-sps-ultra.am.freescale.net) (gcc version 4.0.2 20060628 (Wasabi))

Сообщение отредактировал Славка - Apr 8 2010, 09:02
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Славка
сообщение Apr 9 2010, 09:40
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 6-04-10
Пользователь №: 56 441



Цитата
#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... такое ощущение что в этой сборке зажечь светик тупо невозможно sad.gif

Сообщение отредактировал Славка - Apr 9 2010, 09:44
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 20:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01323 секунд с 7
ELECTRONIX ©2004-2016