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

 
 
> at91, помогите разобраться
i.dmitry
сообщение Aug 15 2008, 19:08
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 8-07-07
Пользователь №: 28 963



Помогите разобраться, пожалуйста.

в Header AT91SAM7S256.h файле написано:
Код
typedef struct _AT91S_PMC {
    AT91_REG     PMC_SCER;     // System Clock Enable Register
    AT91_REG     PMC_SCDR;     // System Clock Disable Register
    AT91_REG     PMC_SCSR;     // System Clock Status Register
    AT91_REG     Reserved0[1];     //
    AT91_REG     PMC_PCER;     // Peripheral Clock Enable Register
    AT91_REG     PMC_PCDR;     // Peripheral Clock Disable Register
    AT91_REG     PMC_PCSR;     // Peripheral Clock Status Register
    AT91_REG     Reserved1[1];     //
    AT91_REG     PMC_MOR;     // Main Oscillator Register
    AT91_REG     PMC_MCFR;     // Main Clock  Frequency Register
    AT91_REG     Reserved2[1];     //
    AT91_REG     PMC_PLLR;     // PLL Register
    AT91_REG     PMC_MCKR;     // Master Clock Register
    AT91_REG     Reserved3[3];     //
    AT91_REG     PMC_PCKR[3];     // Programmable Clock Register
    AT91_REG     Reserved4[5];     //
    AT91_REG     PMC_IER;     // Interrupt Enable Register
    AT91_REG     PMC_IDR;     // Interrupt Disable Register
    AT91_REG     PMC_SR;     // Status Register
    AT91_REG     PMC_IMR;     // Interrupt Mask Register
} AT91S_PMC, *AT91PS_PMC;


далее ниже
Код
#define AT91C_BASE_PMC       ((AT91PS_PMC)     0xFFFFFC00) // (PMC) Base Address


в программе:
Код
    AT91C_BASE_PMC->PMC_SCER = AT91C_PMC_UDP;


правильно ли я понял, что AT91PS_PMC - указатель на структуру_AT91S_PMC.
AT91C_BASE_PMC - ее начальный адресс,
строчка в программе означает, в регистр PMC_SCER (по адресу AT91C_BASE_PMC + 5*AT91_REG) записать значение AT91C_PMC_UDP?

-----------------
теперь файл: lib_AT91SAM7S256.h

Код
__inline unsigned int AT91F_AIC_ConfigureIt (
    AT91PS_AIC pAic,  // \arg pointer to the AIC registers
    unsigned int irq_id,     // \arg interrupt number to initialize
    unsigned int priority,   // \arg priority to give to the interrupt
    unsigned int src_type,   // \arg activation and sense of activation
    void (*newHandler) () ) // \arg address of the interrupt handler
{
    unsigned int oldHandler;
    unsigned int mask;

    oldHandler = pAic->AIC_SVR[irq_id];

    mask = 0x1 << irq_id;
    //* Disable the interrupt on the interrupt controller
    pAic->AIC_IDCR = mask;
    //* Save the interrupt handler routine pointer and the interrupt priority
    pAic->AIC_SVR[irq_id] = (unsigned int) newHandler;
    //* Store the Source Mode Register
    pAic->AIC_SMR[irq_id] = src_type | priority;
    //* Clear the interrupt on the interrupt controller
    pAic->AIC_ICCR = mask;

    return oldHandler;
}


как компилятор узнает адрес регистра AIC_IDCR?
Код
pAic->AIC_IDCR = mask;


ведь pAic это есть AT91PS_AIC, но на какой начальный адрес он указывает НЕТ в библиотеке
Код
typedef struct _AT91S_AIC {
    AT91_REG     AIC_SMR[32];     // Source Mode Register
    AT91_REG     AIC_SVR[32];     // Source Vector Register
    AT91_REG     AIC_IVR;     // IRQ Vector Register
    AT91_REG     AIC_FVR;     // FIQ Vector Register
    AT91_REG     AIC_ISR;     // Interrupt Status Register
    AT91_REG     AIC_IPR;     // Interrupt Pending Register
    AT91_REG     AIC_IMR;     // Interrupt Mask Register
    AT91_REG     AIC_CISR;     // Core Interrupt Status Register
    AT91_REG     Reserved0[2];     //
    AT91_REG     AIC_IECR;     // Interrupt Enable Command Register
    AT91_REG     AIC_IDCR;     // Interrupt Disable Command Register
    AT91_REG     AIC_ICCR;     // Interrupt Clear Command Register
    AT91_REG     AIC_ISCR;     // Interrupt Set Command Register
    AT91_REG     AIC_EOICR;     // End of Interrupt Command Register
    AT91_REG     AIC_SPU;     // Spurious Vector Register
    AT91_REG     AIC_DCR;     // Debug Control Register (Protect)
    AT91_REG     Reserved1[1];     //
    AT91_REG     AIC_FFER;     // Fast Forcing Enable Register
    AT91_REG     AIC_FFDR;     // Fast Forcing Disable Register
    AT91_REG     AIC_FFSR;     // Fast Forcing Status Register
} AT91S_AIC, *AT91PS_AIC;


спасибо

Сообщение отредактировал i.dmitry - Aug 15 2008, 19:10
Go to the top of the page
 
+Quote Post
6 страниц V  < 1 2 3 4 > »   
Start new topic
Ответов (15 - 29)
injen-d
сообщение Aug 17 2008, 14:31
Сообщение #16


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

Группа: Свой
Сообщений: 91
Регистрация: 10-10-07
Из: Воронежа
Пользователь №: 31 250



Цитата(aaarrr @ Aug 17 2008, 17:18) *
Если не трудно, приведите пример. Ну не знаю я в SAM'ах регистров, назначение которых может быть не понятно.
...
Велика - спать спокойно не смогу smile.gif
От каких ошибок может предостеречь использование AT91F_AIC_ConfigureIt?

Если Вы, когда начали изучать SAM7, имели достаточный опыт, или хотя бы у Вас неподалеку находился знающий коллега, который всегда подскажет, то никаких проблем, все понятно. А если не хватает опыта и некому подсказать, то даже совершенно пустяковые сомнения в правильности своего понимания проблемы могут стать серьезным препядствием и положить начало "копанию" не в ту сторону.
У меня, например, помню случались сомнения в правильности выбранной мной последовательности программирования регистров модуля при конфигурировании, и тут "подглядывание" в lib_AT91 помогало быстрее, что называется на примере, разобраться с проблемой.
Цитата
От каких ошибок может предостеречь использование AT91F_AIC_ConfigureIt?

Например, от забывания запретить прерывания в случаях, когда это необходимо, или от забывания сброса флага прерывания. Всякое бывает.
Помоему, спор уже идет о вкусах, или спор ради спора. Неконструктивно.


--------------------
- Бендер, ты же робот, зачем тебе пить пиво?
- Незачем! Я могу бросить в любой момент!
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Aug 17 2008, 14:45
Сообщение #17


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Мне схемотехник еще со старой работы сказал что код написанный с помощью этой библиотеки ему читать проще, чем код написанный в старом стиле по регистрам. Собственно для меняя код тоже более читаем - сразу понимаешь какое действие он производит.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
injen-d
сообщение Aug 17 2008, 14:54
Сообщение #18


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

Группа: Свой
Сообщений: 91
Регистрация: 10-10-07
Из: Воронежа
Пользователь №: 31 250



Цитата(zltigo @ Aug 17 2008, 18:01) *
Ну в то, что сваять нечто вроде-бы работающее программистом не знающим почти ничего о железе - верю, а вот в "освоение" не верю совсем sad.gif Мрачное скопище исходников созданное для создания иллюзии простоты для менеджеров. Ну еще чего-нибудь чисто тестовое железячнику не вникающему ни в тонкости языка, ни в тонкости железа сваять и спихнуть работу.

Удивляет безкомпромиссность и безаппеляционность мнений наших Гуру. Да я согласен, что lib_AT91 далека от идеала в плане эффективности и целесообразности использования ее функций, но в качестве наглядного примера по конфигурации каждого модуля, для новичка она все таки имеет некоторую полезность.


--------------------
- Бендер, ты же робот, зачем тебе пить пиво?
- Незачем! Я могу бросить в любой момент!
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 17 2008, 15:00
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(injen-d @ Aug 17 2008, 18:31) *
У меня, например, помню случались сомнения в правильности выбранной мной последовательности программирования регистров модуля при конфигурировании, и тут "подглядывание" в lib_AT91 помогало быстрее, что называется на примере, разобраться с проблемой.

Как раз у AT91 периферию можно программировать практически в любой последовательности, не противоречащей здравому смыслу, в отличие от некоторых других процессоров.

Цитата(injen-d @ Aug 17 2008, 18:31) *
Например, от забывания запретить прерывания в случаях, когда это необходимо, или от забывания сброса флага прерывания. Всякое бывает.

Сброс флага необходим в одном единственном и крайне редком случае. И лучше это знать и понимать, а не лепить всюду одно и то же для перестраховки. Даже начинающему.

Цитата(injen-d @ Aug 17 2008, 18:31) *
Помоему, спор уже идет о вкусах, или спор ради спора. Неконструктивно.

Для меня это не спор ради спора, а попытка съэкономить себе время и нервы в дальнейшем.

Цитата(SpiritDance @ Aug 17 2008, 18:45) *
Мне схемотехник еще со старой работы сказал что код написанный с помощью этой библиотеки ему читать проще, чем код написанный в старом стиле по регистрам. Собственно для меняя код тоже более читаем - сразу понимаешь какое действие он производит.

Так это еще и новый стиль, оказывается. Куда катится этот мир?

Действие сразу понимаешь, когда видишь регистры и то, что в них пишется, а не однотипные ConfigureIt, EnableIt и т.п.
Go to the top of the page
 
+Quote Post
defunct
сообщение Aug 17 2008, 16:19
Сообщение #20


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(aaarrr @ Aug 17 2008, 18:00) *
Для меня это не спор ради спора, а попытка съэкономить себе время и нервы в дальнейшем.

Не понимаю каким боком чужой стиль касается Вас?! smile.gif

Стиль который Вы пропагандируете по своему хорош, (уверен многие присматриваются к вашим примерам и пытаются делать также), но не стоит его навязывать.

Цитата
Действие сразу понимаешь, когда видишь регистры и то, что в них пишется

Не правда, если не знать/забыть названия регистров, то они мало что скажут.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 17 2008, 16:30
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(defunct @ Aug 17 2008, 20:19) *
Не понимаю каким боком чужой стиль касается Вас?! smile.gif

Просто вижу часто и погружаюсь в депрессию sad.gif

Цитата(defunct @ Aug 17 2008, 20:19) *
Не правда, если не знать/забыть названия регистров, то они мало что скажут.

Если не знать/забыть содержимое функции (что гораздо вероятнее), то её название скажет не больше.

Напишу я, например:
Код
AT91F_PITInit(PIT, mck, 1000)

И что, понятно, что оно делает?
Go to the top of the page
 
+Quote Post
defunct
сообщение Aug 17 2008, 17:22
Сообщение #22


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(aaarrr @ Aug 17 2008, 19:30) *
Если не знать/забыть содержимое функции (что гораздо вероятнее),

Дык, исходники то есть, все в одном проекте. Забыли - всегда можно быстро подсмотреть.
Имена функций тоже не от балды - сами говорят за себя.

Цитата
Напишу я, например:
Код
AT91F_PITInit(PIT, mck, 1000)

И что, понятно, что оно делает?

Импровизирую - инициализирует PIT. (навскидку не вникая в регистры с периодом 1000 тиков частоты mck).
Если будет нужно точнее, подсмотрю в исходниках.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Aug 17 2008, 17:25
Сообщение #23


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Ну я бы еще отметил следующие. Atmel, особенно в последнее время, приводит достаточно много примеров по использованию своих процессоров. Так вот их использование или просто тестирование с использованием lib_xxx проще и быстрее.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 17 2008, 18:15
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(defunct @ Aug 17 2008, 21:22) *
Ипровизирую - инициализирует PIT. (навскидку не вникая в регистры с периодом 1000 тиков частоты mck).

Все так, за исключением ряда моментов smile.gif

1. не 1000 тиков а 1000мкс.
2. частота задается в мегагерцах (вот удобно - где-то в Гц, а где-то в МГц).
3. функция содержит ошибку, так как реальный интервал таймера PIT равен не PIV, а PIV+1.
4. я сделал ошибку, переставив 1000 и mck местами.

А в такой записи все как на ладони:
Код
#define PIT_HZ    1000

AT91C_BASE_PITC->PITC_PIMR = AT91C_PITC_PITEN | AT91C_PITC_PITIEN | ((mck + PIT_HZ * 8) / (PIT_HZ * 16) - 1);


Клянусь, функцию специально я не выбирал, и ошибку с PIV заметил только что.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 17 2008, 20:58
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(SpiritDance @ Aug 17 2008, 16:45) *
Мне схемотехник еще со старой работы сказал что код написанный с помощью этой библиотеки ему читать проще, чем код написанный в старом стиле по регистрам.

Ага, посмотрите, что я писал буквально об этом-же чуть выше. Только вот ведь беда если кто-то именуется у вас "схемотехником", то программированием он сколь-нибудь серьезно просто не владеет, а зачастую и не хочет.


Цитата(injen-d @ Aug 17 2008, 16:54) *
Удивляет безкомпромиссность и безаппеляционность мнений.....

Дык я тоже назвал целых два случая полезности таких "библиотек". А вообще причин появления таких приблуд несколько:
- Профессия программист стала массовой, но само слово уже не значит почти ничего;
- Куча "программистов" программируют вызывая некие функции API, OS, "драйверов", "библиотек" добавляя от себя 2+2=
- Производители хотят привлекать низкоквалифицированных программистов;
- Используя таких "программистов" и подсаживая их на какие-то библиотеки, copy-paste, дикие (но человек ко всему привыкает) конструкции типа AT91C_BASE_PITC->PITC_PIMR производитель чипов привязывает их и к своим контроллерам.
Многие довольны.



Цитата(sergeeff @ Aug 17 2008, 19:25) *
...их использование или просто тестирование с использованием lib_xxx проще и быстрее.

Про тестирование "схемотехником" согласен, а вот разумное использование возможностей железа крайне затруднено smile.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Aug 18 2008, 06:44
Сообщение #26


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Я считал, что "разумное использование возможностей железа" - это убедиться в том, что железо работает стабильно, быстро, без ошибок и решает твои задачи.
При этом твоя программа "читабельна" и понятна твоим коллегам. Именно поэтому и написал, что lib_xxx вполне удобоваримая вещь.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 18 2008, 07:47
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(sergeeff @ Aug 18 2008, 08:44) *
Я считал, что "разумное использование возможностей железа" - это убедиться в том, что железо работает стабильно, быстро, без ошибок и решает твои задачи.

Насколько я понимаю, Ваш бизнес изготовление демо бордов? Для быстрой, не вникая в подробности и нюансы железа, проверки, что в каких-то режимах железо в принципе работает? Против пригодности для этого не возражал ни разу.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 18 2008, 09:54
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Еще один показательный пример для любителей lib_AT91 sad.gif
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Aug 18 2008, 12:13
Сообщение #29


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

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(aaarrr @ Aug 18 2008, 13:54) *
Еще один показательный пример для любителей lib_AT91 sad.gif


Нормальный компилятор не должен ругаться на число параметров > 4 (ISO/IEC 9899 : 5.2.4.1 Translation limits -> 127 parameters in one function definition).

Ни в одной из имеющихся в моем архиве lib_xxx не обнаружил AT91C_BASE_AIC->AIC_IMR = 1 << AT91C_ID_PIOA;

Очевидно, что в lib_xxx полно ошибок. А кто мешает их исправить и пользоваться дальше?
Go to the top of the page
 
+Quote Post
SergeiCh
сообщение Aug 18 2008, 12:19
Сообщение #30


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

Группа: Участник
Сообщений: 99
Регистрация: 22-03-07
Из: Novosibirsk
Пользователь №: 26 415



По мне структуры хороши хотя бы тем, что при отладке в Eclipse/Insight позволяют очень удобно смотреть содержимое регистров. Лучшего способа, чем добавить такую "сущность" smile.gif в watch, я просто не знаю.
Go to the top of the page
 
+Quote Post

6 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 02:23
Рейтинг@Mail.ru


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