Программирование SDK1.1

Учебный лабораторный комплекс SDK-1.1 на базе микроконтроллера ADuC812 с ядром MCS51 # RS-232C, I2C

Re: Программирование SDK1.1

Сообщение SAE » 08 апр 2010, 22:46

Доброго времени суток!
Вопрос такой: никак не могу разобраться с простейшей задачкой :oops: есть некое реальное устройство (тот же пресловутый светоидиод) подключаемое к порту P0.1. Так вот, как запрограммировать это? Через плис на EXT_DATA и колдовать со страницами (светодиод вывести на выводы J3) или можно приткнуть напрямую к порту (где?) и тупо "mov P0 #0Ch"?

P.S. Да, вопрос тупой, но я учусь, поэтому мне можно.
SAE
 
Сообщения: 4
Зарегистрирован: 08 мар 2010, 00:25

Re: Программирование SDK1.1

Сообщение vvp666 » 08 апр 2010, 23:09

Банальнейший вопрос есть :roll:

9600 openchannel com1 - это мы пишем в load.m3p, прошивая из windows. А какой адрес/имя/мнемоника у юсб в винде? Используется переходник ком-юсб. Варианты usb0, usb1, usb2 не подходят :) Из-под линукса всё понятно.
bye
vvp666
 
Сообщения: 28
Зарегистрирован: 09 дек 2009, 17:37

Re: Программирование SDK1.1

Сообщение Shico » 08 апр 2010, 23:26

vvp666 писал(а):Банальнейший вопрос есть :roll:

9600 openchannel com1 - это мы пишем в load.m3p, прошивая из windows. А какой адрес/имя/мнемоника у юсб в винде? Используется переходник ком-юсб. Варианты usb0, usb1, usb2 не подходят :) Из-под линукса всё понятно.

Обычно переходник USB-to-COM устанавливается в системе как виртуальный COM-порт. А этот виртуальный COM-порт имеет вполне обычное имя типа COM8, COM9 и т.д. Его в свойствах можно настроить. Посмотрите какие у Вас в системе есть COM-порты, я думаю один из них, то что Вам нужно.
"Раньше гусиными перьями писали вечные мысли, а теперь вечными перьями пишут гусиные мысли". В. Солоухин
Аватара пользователя
Shico
 
Сообщения: 301
Зарегистрирован: 06 апр 2008, 16:15
Откуда: Санкт-Петербург

Re: Программирование SDK1.1

Сообщение vvp666 » 08 апр 2010, 23:35

Про виртуальный com не приходило в голову. Спасибо!
bye
vvp666
 
Сообщения: 28
Зарегистрирован: 09 дек 2009, 17:37

Re: Программирование SDK1.1

Сообщение DinKa » 09 апр 2010, 13:01

SAE писал(а):Доброго времени суток!
Вопрос такой: никак не могу разобраться с простейшей задачкой :oops: есть некое реальное устройство (тот же пресловутый светоидиод) подключаемое к порту P0.1. Так вот, как запрограммировать это? Через плис на EXT_DATA и колдовать со страницами (светодиод вывести на выводы J3) или можно приткнуть напрямую к порту (где?) и тупо "mov P0 #0Ch"?

P.S. Да, вопрос тупой, но я учусь, поэтому мне можно.

Лучше подключайте свое устройство через разъем J3 (схемотехнически грамотно!) - он для этого и предназначен. На этот разъем выведены линии параллельного дискретного 16-разрядного порта ПЛИС. Соответственно, с программной точки зрения Вам необходимо использовать регистры ПЛИС EXT_LO и/или EXT_HI (зависит от подключения устройства), настроить их на выход - в этом Вам помогут биты в регистре управления ENA. Дальше пишите в соответствующие биты регистров EXT_LO и/или EXT_HI и зажигайте, управляйте и т.д. :)
К порту P0 лучше не подключайтесь, так как он Вам еще понадобится: пользовательская программа располагается во внешней памяти программ и данных (SRAM), которая подключена к микроконтроллеру через порты P0 и P2. Кроме того, через порт P0 подключена и ПЛИС.
DinKa
 
Сообщения: 247
Зарегистрирован: 23 апр 2008, 18:01

Re: Программирование SDK1.1

Сообщение h0rr0rr_drag0n » 09 апр 2010, 15:55

Здравствуйте. В процессе подготовки к лабе, я похоже обнаружил странную багу в SDK1.1. Когда я записываю определенное значение в регистр SV ПЛИСа, а затем сразу же считываю его, то считывается совсем не то, что записывалось :shock: .
Вот пример программы, позволяющей увидеть данный баг:
Код: Выделить всё
#include "aduc812.h"

#define PLD_PAGE 0x08
#define SV_ADDR 0x080007

/* ------------------------------------------------------------------ */
/* funcs to work with PLD */

/* unsigned char * regmum == number of register to write
* unsigned char val == data, which we write to registr
*/
void write2plis(xdata unsigned char * regnum, unsigned char val) {
    unsigned char oldDPP = DPP;

    DPP = PLD_PAGE;
    *regnum = val;
    DPP = oldDPP;

    return;
}

/* unsigned char * regnum == number of registr to read */
unsigned char read_from_plis(xdata unsigned char * regnum) {
    unsigned char val = 0;
    unsigned char oldDPP = DPP;

    DPP = PLD_PAGE;
    val = *regnum;
    DPP = oldDPP;

    return val;
}

/* ----------------------------------------------------------- */

void main(void) {
    unsigned char leds_state = 0x83;
    unsigned int t = 0;

    while (1) {
        /* пишем в регистр 0x83, но на светодиодах это
         * отображается только на этой итерации.
         * На следующей итерации уже отображается 0x07 O_o
         */
        write2plis(SV_ADDR, leds_state);
        while(t < 10000) { t++; }
        t = 0;
        leds_state = read_from_plis(SV_ADDR);
    } /* while (1) */
}
Университет развивает все способности, в том числе — глупость.
-- Антон Павлович Чехов
Аватара пользователя
h0rr0rr_drag0n
 
Сообщения: 99
Зарегистрирован: 18 мар 2009, 22:27
Откуда: СПб

Re: Программирование SDK1.1

Сообщение DinKa » 10 апр 2010, 00:33

h0rr0rr_drag0n писал(а):Здравствуйте. В процессе подготовки к лабе, я похоже обнаружил странную багу в SDK1.1. Когда я записываю определенное значение в регистр SV ПЛИСа, а затем сразу же считываю его, то считывается совсем не то, что записывалось :shock: .

В регистр управления светодиодами можно записывать, а читать его нельзя. Это написано в руководстве пользователя для стенда SDK-1.1. Кроме того, Вы можете в этом убедиться сами, если посмотрите логическую схему расширителя портов ввода-вывода - думаю знаний по схемотехнике (комбинационная + последовательностная логика) Вам будет достаточно, чтобы понять эту схему.
DinKa
 
Сообщения: 247
Зарегистрирован: 23 апр 2008, 18:01

Re: Программирование SDK1.1

Сообщение h0rr0rr_drag0n » 10 апр 2010, 18:56

Спасибо за совет. Выходит, что нельзя читать из регистров ENA, C_IND и SV...
Университет развивает все способности, в том числе — глупость.
-- Антон Павлович Чехов
Аватара пользователя
h0rr0rr_drag0n
 
Сообщения: 99
Зарегистрирован: 18 мар 2009, 22:27
Откуда: СПб

Re: Программирование SDK1.1

Сообщение DinKa » 10 апр 2010, 23:13

h0rr0rr_drag0n писал(а):Спасибо за совет. Выходит, что нельзя читать из регистров ENA, C_IND и SV...

Да-да, именно так :)
DinKa
 
Сообщения: 247
Зарегистрирован: 23 апр 2008, 18:01

Re: Программирование SDK1.1

Сообщение SAE » 25 апр 2010, 23:32

Здравствуйте ещё раз. В SDK клавиатура может обрабатываться через прерывание и непосредственным считыванием. Какой вектор прерывания устанавливается по нажатию клавиши? и ENA 6-й бит должен быть "1"?
И если можно, ответте чуть подробнее - как обработать нажатие клавиши по прерыванию?
Спасибо за ответы заранее.
SAE
 
Сообщения: 4
Зарегистрирован: 08 мар 2010, 00:25

Re: Программирование SDK1.1

Сообщение A.Sukhoy » 26 апр 2010, 00:51

Хотел сначала сразу написать, что прерываний от клавиатуры не существует, но все-таки не поленился и решил проверить еще раз в мане по стенду.
С удивлением узнал, что существует полная и упрощенная конфигурация стенда.
В полной конфигурации при записи логического «0» прерывание от клавиатуры запрещается. Если бит установлен в «1», то прерывание от клавиатуры разрешено.
В упрощенной конфигурации бит KB всегда равен нулю, т.е. прерывание клавиатуры запрещено.

Может я тоже не внимательно листал ман по стенду, но я не нашел больше никаких упоминаний про прерывание от клавиатуры (даже в разделе про прерывания :!: ).
Да и на лабах все как-то с клавиатурой по опросу работали и сейчас судя по последнему приему так же работают (хотя возможно у нас большинство стендов старой ревизии, где нет прерываний).
Так есть они все-таки или нет эти прерывания?
Логической схемы расширителя портов ввода-вывода для последней ревизии на сайте нет, так что не посмотреть куда там что подключено.
Ждем комментариев от разработчиков стенда :)

Вы уверены, что у вас полная конфигурация? Как написано в руководстве проверить это можно так
Если при старте программы записать в тетраду COL регистра KB ненулевое значение, а затем его
считать, то в полной конфигурации будет считано записанное значение, а в упрощенной — нули.


Если у вас не полная конфигурация, то единственный способ работать с клавиатурой это по опросу, который в свою очередь можно реализовать по прерыванию от таймера например.
Аватара пользователя
A.Sukhoy
 
Сообщения: 182
Зарегистрирован: 08 апр 2008, 17:53

Re: Программирование SDK1.1

Сообщение SAE » 26 апр 2010, 08:32

А...неполная...
Вот жешь блин, напаяют плисов всяких максов и мучайся с ними:( Ну и ладно. Спасибо за ответ.
а всё-таки интересно, если была бы полная версия, господа разработчики, по какому адресу всё-таки вскочило бы это прерывание
SAE
 
Сообщения: 4
Зарегистрирован: 08 мар 2010, 00:25

Re: Программирование SDK1.1

Сообщение DinKa » 26 апр 2010, 17:36

SAE писал(а):В SDK клавиатура может обрабатываться через прерывание и непосредственным считыванием. Какой вектор прерывания устанавливается по нажатию клавиши? и ENA 6-й бит должен быть "1"?

В полной конфигурации ПЛИС стенда SDK-1.1 прерывание от клавиатуры - это внешнее прерывание INT0 МК ADuC812. Чтобы так работать, необходимо разрешить прерывание от клавиатуры (6-й бит ENA должен быть "1"); настроить внешнее прерывание INT0 так, чтобы оно работало по спаду, а не по уровню (SFR TCON); разрешить внешнее прерывание INT0 (бит EX0 = 1 в SFR IE); написать обработчик прерывания INT0; переключатели SW3 должны быть в положении OFF; 5-й бит ENA (регистр ПЛИС) должен быть "1"; написать алгоритм сканирования клавиатуры.
Для сокращенной версии ПЛИС - как Вам было написано ранее: по таймеру сканируйте клавиатуру (это нужно пояснять или нет :?: ).
Какая ревизия у Вашего стенда?
SAE писал(а):Вот жешь блин, напаяют плисов всяких максов и мучайся с ними:( Ну и ладно. Спасибо за ответ.

Если работа с портами ввода-вывода - это уже мучение, то дальше ничего легкого для Вас и подавно не будет :)
A.Sukhoy писал(а):Хотел сначала сразу написать, что прерываний от клавиатуры не существует, но все-таки не поленился и решил проверить еще раз в мане по стенду.
С удивлением узнал, что существует полная и упрощенная конфигурация стенда.
Может я тоже не внимательно листал ман по стенду...

Именно так. Это к вопросу о том, как студенты "внимательно" читают документацию :D
A.Sukhoy писал(а):Да и на лабах все как-то с клавиатурой по опросу работали и сейчас судя по последнему приему так же работают (хотя возможно у нас большинство стендов старой ревизии, где нет прерываний).

Действительно, такая сложилась традиция + стенды разных ревизий в коробке в лабораториях + алгоритм сканирования клавиатуры всё-равно один и тот же. Особо пытливые и внимательные могут работать с клавиатурой по прерыванию - спец. запретов нет 8-)
A.Sukhoy писал(а):Логической схемы расширителя портов ввода-вывода для последней ревизии на сайте нет, так что не посмотреть куда там что подключено.

Теперь есть :!: Благодаря Вашей активности.
DinKa
 
Сообщения: 247
Зарегистрирован: 23 апр 2008, 18:01

Re: Программирование SDK1.1

Сообщение A.Sukhoy » 26 апр 2010, 19:35

Ну теперь все стало понятно и можно проверять студентов и магистров 5/6 курса на "внимательность" при защите лаб. :D
Но все же всю последовательность действий необходимо внести в обновленную версию мана по стенду или в вики хотя бы.
А то строчка с таблице, в которой про это упоминается, не очень убедительно выглядит, особенно если про это спрашивать у студентов.
Последний раз редактировалось A.Sukhoy 27 апр 2010, 12:58, всего редактировалось 1 раз.
Аватара пользователя
A.Sukhoy
 
Сообщения: 182
Зарегистрирован: 08 апр 2008, 17:53

Re: Программирование SDK1.1

Сообщение Рустам » 27 апр 2010, 12:03

A.Sukhoy писал(а):С удивлением узнал, что существует полная и упрощенная конфигурация стенда.

А мужики-то и не знали :D
Аватара пользователя
Рустам
 
Сообщения: 164
Зарегистрирован: 27 май 2008, 01:24

Пред.

Вернуться в SDK 1.1

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1