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

 
 
 
Reply to this topicStart new topic
> AM1707 + Linux. Нужно написать простую программу
kovigor
сообщение Mar 28 2012, 19:16
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



обработчик прерывания от кнопки, подключенной к GPIO МК, который будет при возникновении прерывания зажигать или гасить светодиод. Что у меня уже есть:
- Отладочная плата на AM1707 и SDK для нее: http://www.ti.com/tool/tmdxevm1707
- Достаточный опыт создания самых разных программ для разных ARM без привлечения ОС, т.е., "standalone applications". И для AM1707 приходилось писать тоже.
- Базовые навыки работы в Linux и навыки написания простейших программ, на уровне "Hello World" или чуть более высоком. Опыта создания драйверов, демонов и проч. нет.
- Поставил виртуальную машину, развернул в ней Ubuntu и установил средства разработки (CodeSourcery). Попробовал писать и собирать простейшие программки, выкладывать их на TFTP, скачивать оттуда на плату и там запускать. Все получается.

Теперь вопрос - в каком направлении мне двигаться для решения моей задачи ? Что изучить в первую очередь ?
Go to the top of the page
 
+Quote Post
KRS
сообщение Mar 28 2012, 20:06
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



вы посмотрите ARM-DS5, там eclipse с плагинами которые позволяют через gdbserver отлаживать приложения. ну и писать конечно, при начале отладки код компилируется и заливается сразу на плату через ssh. На beagleboard все на ура работало.

Можно конечно и так eclipse с remote system explorer и другими плагинами поставить
Go to the top of the page
 
+Quote Post
Arischenko Ivan
сообщение Mar 28 2012, 20:16
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 112
Регистрация: 29-10-06
Пользователь №: 21 768



Цитата(kovigor @ Mar 28 2012, 23:16) *
обработчик прерывания от кнопки, подключенной к GPIO МК, который будет при возникновении прерывания зажигать или гасить светодиод. Что у меня уже есть:

Теперь вопрос - в каком направлении мне двигаться для решения моей задачи ? Что изучить в первую очередь ?


Самый простой вариант экспортировать GPIO и дергать их bash скриптом.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Mar 28 2012, 20:53
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Arischenko Ivan @ Mar 28 2012, 23:16) *
Самый простой вариант экспортировать GPIO и дергать их bash скриптом.


Надо именно обрабатывать прерывание.
И еще. Сейчас очень не хочется отвлекаться на всякие второстепенные вещи вроде Eclipse. Проблема ведь не в этом. Есль Ubuntu на вирт. машине, есть средство разработки - CodeSourcery. Все это реально запущено и работает, и меня целиком устраивает. AM1707 менять на что-то другое тоже нельзя ...
Go to the top of the page
 
+Quote Post
Arischenko Ivan
сообщение Mar 29 2012, 06:18
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 112
Регистрация: 29-10-06
Пользователь №: 21 768



Цитата(kovigor @ Mar 29 2012, 00:53) *
Надо именно обрабатывать прерывание.
И еще. Сейчас очень не хочется отвлекаться на всякие второстепенные вещи вроде Eclipse. Проблема ведь не в этом. Есль Ubuntu на вирт. машине, есть средство разработки - CodeSourcery. Все это реально запущено и работает, и меня целиком устраивает. AM1707 менять на что-то другое тоже нельзя ...


1. Поднять на ubutu tftp сервер.
2. Проинициализировать прерывание-обработчик где - нибудь в arch/arm/mach-davinci/board-da830-evm.c функции "static __init void da830_evm_init(void)" прерывание и обработчик как в примере
3. Пересобрать ядро, запустить на плате (для начала загрузив через tftp), убедиться что все работает
4. Прошить в плату.

Как-то так.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Mar 29 2012, 09:47
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Arischenko Ivan @ Mar 29 2012, 09:18) *
1. Поднять на ubutu tftp сервер.
2. Проинициализировать прерывание-обработчик где - нибудь в arch/arm/mach-davinci/board-da830-evm.c функции "static __init void da830_evm_init(void)" прерывание и обработчик как в примере
3. Пересобрать ядро, запустить на плате (для начала загрузив через tftp), убедиться что все работает
4. Прошить в плату.

Как-то так.


Ядро собирал, вроде получается. TFTP - сервер поднят, свои простейшие программки я скачивал на плату и запускал, тут все хорошо. За совет большое спасибо. Сейчас посмотрю указанный вами пример ...
Go to the top of the page
 
+Quote Post
kovigor
сообщение Apr 3 2012, 20:04
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(kovigor @ Mar 29 2012, 12:47) *
03.04.2012.

Все получилось.
С отладочной платой поставляются примеры модулей, и среди них - модуль, регистрирующий прерывание от линии GPIO:

Код
#include <linux/module.h>
#include <linux/version.h>
#include <linux/delay.h>
#include <linux/irq.h>
#include <linux/interrupt.h>
#include <linux/completion.h>
#include <mach/cputype.h>
#include <mach/hardware.h>
#include <mach/mux.h>
#include <asm/gpio.h>

static int gpio_num;
static int gpio_pin;

DECLARE_COMPLETION(work);

static irqreturn_t handler (int irq, void * dev)
{
    complete_all(&work);
    return IRQ_HANDLED;
}

int init_module()
{
    int status;
    init_completion(&work);

    gpio_num = 87;    /* gpio_num = (bank_num * 16) + pin_num */
    gpio_pin = DA830_GPIO5_7;

    printk("\nTesting gpio %d (connected to boot pin S2-7)\n", gpio_num);

    /* init/set pinmux */
    status = davinci_cfg_reg(gpio_pin);
    if (status < 0) {printk("pin could not be muxed for GPIO functionality %d\n", gpio_num);
        return status;
    }
    
    status = gpio_request(gpio_num, "gpio_test\n");
    if (status < 0) {printk("ERROR can not open GPIO %d\n", gpio_num);
        return status;
    }

    gpio_direction_input(gpio_num);

    printk("The current state of S2-7 pin is ");

    if(gpio_get_value(gpio_num) == 0)  printk("OFF. \n\tWaiting for the pin to be on..\n");
    else printk("ON. \n\tWaiting for the pin to be off..\n");

    status = request_irq(gpio_to_irq(gpio_num), handler, 0, "gpio_test", NULL);
    if(status < 0) {printk(KERN_ERR "error %d requesting GPIO IRQ %d\n", status, gpio_num);
        return status;
    }

    set_irq_type(gpio_to_irq(gpio_num), IRQ_TYPE_EDGE_RISING);

    wait_for_completion_interruptible(&work);

    printk(".. done\n");

    return 0;
}

void cleanup_module(void)
{
    
    gpio_free(gpio_num);
    free_irq(gpio_to_irq(gpio_num), NULL);
}

MODULE_LICENSE("GPL");


Я его немного доработал, в частности, закомментировал функции "wait_for_completion_interruptible(&work);" и "complete_all(&work);" и вставил вызов изменения состояния светодиода в обработчик прерывания "handler". В результате теперь по каждому прерыванию от одной из линий GPIO светодиод на другой линии меняет свое состояние. Собрал, залил на плату, загрузил - все работает. Вопрос вот в чем. Как я понял, функции "wait_for_completion_interruptible()" и "complete_all()" - 'это специфические функции, реализованные чуть ли не только в Linux для ARM'ов от TI. Или я не прав ? Хоть они мне, похоже, не требуются, очень хотелось бы увидеть более-менее систематическое их описание. Кто подскажет, где его искать ? А также где искать описания на остальные функции, вроде той же "gpio_free" ? Сейчас приходится по частичкам вытаскивать его из заголовочных файлов и исходников. Описания в текстовом виде или в PDF я не нашел ...
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Apr 4 2012, 06:41
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Например. Вообще лучшая документация - это сам код.

З.Ы. по ссылке ванильное ядро, так что ничего специфичного для TI.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Apr 4 2012, 09:46
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Dron_Gus @ Apr 4 2012, 09:41) *
Например. Вообще лучшая документация - это сам код.
З.Ы. по ссылке ванильное ядро, так что ничего специфичного для TI.


Понял, большое спасибо, продолжаю разбираться ...
Go to the top of the page
 
+Quote Post

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

 


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


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