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

 
 
> 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
 
Start new topic
Ответов
zltigo
сообщение Aug 18 2008, 21:30
Сообщение #2


Гуру
******

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



Цитата
zltigo и aaarrr
Я там выше прикрепил рисунок.

Да понял я, понял. Это не секрет . Рисунков прикреплять не буду, но при запросе по имени тэга под курсором я получаю все нужное и естественно тоже с комментариями, поскольку в хидере у меня все тоже сгруппировано и откомментированно. Причем это механизм универсальный и работает при описании собственных битов для, например, чего либо подобного GPIO и с алиасами.

P.S.
Извините, я случайтно удалил из Вашего поста несколько уточняющих строк sad.gif

Цитата(defunct @ Aug 18 2008, 23:07) *
Более наглядный пример - канал DMA (которых больше десятка и все они имеют одинаковые регистры), здесь так и просится работа с указателем на DMA канал.

Просится не просится, но Вы, простите, пользуетесь НЕ указателями smile.gif. Посему никакого удобства не имеется. Если мне потребуется я спокойно получу и передам указатель, то-же самое придется сделать и Вам с Вашей записью smile.gif На предложение ради этого всегда писать в стиле *pAT91C_BASE_PITC->PITC_PIMR = x я даже отвечать не буду.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
defunct
сообщение Aug 18 2008, 21:36
Сообщение #3


кекс
******

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



Цитата(zltigo @ Aug 19 2008, 00:30) *
Просится не просится, но Вы, простите, пользуетесь НЕ указателями smile.gif. Посему никакого удобства не имеется. Если мне потребуется я спокойно получу и передам указатель, то-же самое придется сделать и Вам с Вашей записью smile.gif

Драсти, а чем тогда я пользуюсь? ;>
То чем я пользуюсь (то чем нас Atmel порадовал) AT91C_BASE_XXX - константные указатели на структры регистров периферийных модулей XXX.

Цитата
*pAT91C_BASE_PITC->PITC_PIMR

это уже через чур, и согласен, даже не подлежит обсуждению, из-за неэффективного использования памяти.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 18 2008, 21:57
Сообщение #4


Гуру
******

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



Цитата(defunct @ Aug 18 2008, 23:36) *
Драсти, а чем тогда я пользуюсь? ;>

Вы пользуетесь макросами типа
#define pNAME *(struct *)0xXXXXXXX
Это не указатель и, как уже писал, данное Вами имя в венгерском стиле pointerNAME - ошибочно.
Цитата(defunct @ Aug 18 2008, 23:50) *
...не отбрасывать как ересь все подряд и потом с Божьей помощью и с помощью ДШ писать с чистого листа.

Зачем с чистого smile.gif берется исходный и ересь выжигается каленым железом smile.gif. Причем это проделыватся не за раз а по мере необходимости и сопровождается чтением документации и комментированием нюансов, которое, как привило в хидерах практически отсутсттвует.
Цитата(aaarrr @ Aug 18 2008, 23:52) *
Простая тренировка пальцев smile.gif Согласитесь, что при написании драйвера периферийного устройства время набора буковок составляет очень небольшой процент.

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
defunct
сообщение Aug 18 2008, 21:58
Сообщение #5


кекс
******

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



Цитата(zltigo @ Aug 19 2008, 00:54) *
Вы пользуетесь макросами типа
#define NAME *(struct *)0xXXXXXXX
Это не указатель.

Нет Вы не правы. Макросы вот такие:
((AT91PS_EMAC) 0xFFFDC000)
эквивалентно:
((Struct *) 0xFFFDC000)

т.е. это честные указатели на группы регистров.

Цитата
Настоятельно и, по-моему, обоснованно рекомендую.

Если Вы про Редькина, то я согласен.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 18 2008, 22:10
Сообщение #6


Гуру
******

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



Цитата(defunct @ Aug 18 2008, 23:58) *
т.е. это честные указатели на группы регистров.

smile.gif если это указатели, то запись
pNAME = x присваивает значение УКАЗАТЕЛЮ а не обьекту smile.gif. Посему вычитывайте макросы дальше до прояснения написанного в них.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
defunct
сообщение Aug 18 2008, 22:16
Сообщение #7


кекс
******

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



Цитата(zltigo @ Aug 19 2008, 01:10) *
pNAME = x присваивает значение УКАЗАТЕЛЮ а не обьекту smile.gif. Посему вычитывайте макросы дальше до прояснения написанного в них.

это константный указатель.
pBASE_NAME = x - не имеет смысла вообще.


#define X (U32 *)(0xFFFF0000)

X = x; <- не имеет смысла
*X = x; пишем x по адресу 0xFFFF0000.



typedef struct tagMYSTRUCT
{
U32 x, y;
} *PMYSTRUCT;

#define X ((PMYSTRUCT) 0xFFFF0000)

X - структура из элементов x, y по адресу 0xFFFF0000
X = z; - не имеет смысла.
X->x = z; пишем z по адресу 0xFFFF0000
X->y = z; пишем z по адресу 0xFFFF0000 + 4
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 18 2008, 22:28
Сообщение #8


Гуру
******

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



Цитата(defunct @ Aug 19 2008, 00:16) *
это константный указатель.

Может стоит освежить знания языка? А то, право, как-то странно общаться sad.gif. Константный, не константный дело второе.
Цитата
pBASE_NAME = x - не имеет смысла вообще.

Ага, но именно ТАК Вы пишите и работает по той причине, что это на самом деле НЕ указатель (мамнадчатый раз уже пишу) хотя перед ним и у Вас ОШИБОЧНО стоит 'p' а выражение эквивалентное:
*pBASE_NAME = x;

Цитата(defunct @ Aug 19 2008, 00:16) *
это константный указатель.

Может стоит освежить знания языка? А то, право, как-то странно общаться sad.gif. Константный, не константный дело второе.
Цитата
pBASE_NAME = x - не имеет смысла вообще.

Ага, но именно ТАК Вы пишите и работает по той причине, что это на самом деле НЕ указатель (мамнадчатый раз уже пишу) хотя перед ним у Вас и стоит 'p'. Это, простите, Ваш "стиль" и Ваш код с котрого все началось:
Цитата(defunct @ Aug 18 2008, 22:40) *
pPITC->PITC_PIMR = x;

Так какому из Вас теперь верить smile.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- i.dmitry   at91   Aug 15 2008, 19:08
- - aaarrr   Цитата(i.dmitry @ Aug 15 2008, 23:08) пра...   Aug 15 2008, 19:32
|- - defunct   Цитата(aaarrr @ Aug 15 2008, 22:32) P.S. ...   Aug 16 2008, 22:32
|- - aaarrr   Цитата(defunct @ Aug 17 2008, 02:32) А ес...   Aug 16 2008, 22:44
|- - defunct   ЦитатаСкажите, а форум мне покажет тело функции пр...   Aug 16 2008, 23:00
|- - aaarrr   Цитата(defunct @ Aug 17 2008, 03:00) Копи...   Aug 16 2008, 23:27
|- - defunct   Цитата(aaarrr @ Aug 17 2008, 02:27) В сво...   Aug 16 2008, 23:49
|- - aaarrr   Цитата(defunct @ Aug 17 2008, 03:49) Это ...   Aug 17 2008, 00:09
|- - defunct   Цитата(aaarrr @ Aug 17 2008, 03:09) ...да...   Aug 17 2008, 00:42
|- - aaarrr   Цитата(defunct @ Aug 17 2008, 04:42) Не п...   Aug 17 2008, 09:52
- - injen-d   ЦитатаВзгляните на это с т.з. человека который в г...   Aug 17 2008, 10:20
|- - aaarrr   Цитата(injen-d @ Aug 17 2008, 14:20)...   Aug 17 2008, 10:41
||- - injen-d   Цитата(aaarrr @ Aug 17 2008, 14:41) По-мо...   Aug 17 2008, 13:05
||- - aaarrr   Цитата(injen-d @ Aug 17 2008, 17:05)...   Aug 17 2008, 13:18
||- - injen-d   Цитата(aaarrr @ Aug 17 2008, 17:18) Если ...   Aug 17 2008, 14:31
|- - zltigo   Цитата(injen-d @ Aug 17 2008, 12:20)...   Aug 17 2008, 14:01
|- - injen-d   Цитата(zltigo @ Aug 17 2008, 18:01) Ну в ...   Aug 17 2008, 14:54
- - SpiritDance   Мне схемотехник еще со старой работы сказал что ко...   Aug 17 2008, 14:45
|- - zltigo   Цитата(SpiritDance @ Aug 17 2008, 16:45) ...   Aug 17 2008, 20:58
- - aaarrr   Цитата(injen-d @ Aug 17 2008, 18:31)...   Aug 17 2008, 15:00
|- - defunct   Цитата(aaarrr @ Aug 17 2008, 18:00) Для м...   Aug 17 2008, 16:19
|- - aaarrr   Цитата(defunct @ Aug 17 2008, 20:19) Не п...   Aug 17 2008, 16:30
|- - defunct   Цитата(aaarrr @ Aug 17 2008, 19:30) Если ...   Aug 17 2008, 17:22
- - sergeeff   Ну я бы еще отметил следующие. Atmel, особенно в п...   Aug 17 2008, 17:25
- - aaarrr   Цитата(defunct @ Aug 17 2008, 21:22) Ипро...   Aug 17 2008, 18:15
- - sergeeff   Я считал, что "разумное использование возможн...   Aug 18 2008, 06:44
|- - zltigo   Цитата(sergeeff @ Aug 18 2008, 08:44) Я с...   Aug 18 2008, 07:47
- - aaarrr   Еще один показательный пример для любителей lib_A...   Aug 18 2008, 09:54
|- - sergeeff   Цитата(aaarrr @ Aug 18 2008, 13:54) Еще о...   Aug 18 2008, 12:13
||- - aaarrr   Цитата(sergeeff @ Aug 18 2008, 16:13) Нор...   Aug 18 2008, 12:21
|- - SergeiCh   По мне структуры хороши хотя бы тем, что при отлад...   Aug 18 2008, 12:19
|- - zltigo   Цитата(SergeiCh @ Aug 18 2008, 14:19) По ...   Aug 18 2008, 12:48
||- - SergeiCh   Цитата(zltigo @ Aug 18 2008, 19:48) А смо...   Aug 18 2008, 13:57
||- - zltigo   Цитата(SergeiCh @ Aug 18 2008, 15:57) Но ...   Aug 18 2008, 14:15
||- - aaarrr   Цитата(zltigo @ Aug 18 2008, 18:15) Зато ...   Aug 18 2008, 14:21
||- - zltigo   Цитата(aaarrr @ Aug 18 2008, 16:21) после...   Aug 18 2008, 14:25
|||- - aaarrr   Цитата(zltigo @ Aug 18 2008, 18:25) А иде...   Aug 18 2008, 14:30
||- - defunct   Цитата(aaarrr @ Aug 18 2008, 17:21) Ну, н...   Aug 18 2008, 20:40
||- - aaarrr   Цитата(defunct @ Aug 19 2008, 00:27) Не о...   Aug 18 2008, 20:55
||- - zltigo   Цитата(defunct @ Aug 18 2008, 22:40) Не о...   Aug 18 2008, 21:05
|- - Сергей Борщ   Цитата(SergeiCh @ Aug 18 2008, 15:19) По ...   Aug 20 2008, 10:12
|- - injen-d   Цитата(Сергей Борщ @ Aug 20 2008, 14:12) ...   Aug 20 2008, 16:51
||- - Сергей Борщ   Цитата(injen-d @ Aug 20 2008, 19:51)...   Aug 20 2008, 16:58
|- - SergeiCh   Цитата(Сергей Борщ @ Aug 20 2008, 17:12) ...   Aug 21 2008, 07:05
|- - SergeiCh   И как правильно заметил zltigo, не все регистры од...   Aug 21 2008, 08:38
- - zltigo   Причем о качестве написания библиотек тоже можно п...   Aug 18 2008, 12:36
|- - AHTOXA   Цитата(zltigo @ Aug 18 2008, 18:36) Что-т...   Aug 18 2008, 12:44
- - defunct   zltigo и aaarrr Я там выше прикрепил рисунок. Собс...   Aug 18 2008, 21:07
|- - zltigo   Цитата(defunct @ Aug 18 2008, 23:07) ..и ...   Aug 18 2008, 21:40
|- - defunct   Цитата(zltigo @ Aug 19 2008, 00:40) Нет,н...   Aug 18 2008, 21:50
|- - aaarrr   Цитата(zltigo @ Aug 19 2008, 01:54) Зачем...   Aug 18 2008, 21:57
||- - zltigo   Цитата(aaarrr @ Aug 18 2008, 23:57) А тут...   Aug 18 2008, 22:06
|- - aaarrr   Цитата(defunct @ Aug 19 2008, 01:58) Если...   Aug 18 2008, 22:02
||- - defunct   Цитата(aaarrr @ Aug 19 2008, 01:02) Нет, ...   Aug 18 2008, 22:09
||- - aaarrr   Цитата(defunct @ Aug 19 2008, 02:09) Насч...   Aug 18 2008, 22:15
||- - defunct   Цитата(aaarrr @ Aug 19 2008, 01:15) Какой...   Aug 18 2008, 22:40
||- - aaarrr   Цитата(defunct @ Aug 19 2008, 02:29) Вот ...   Aug 18 2008, 22:40
|||- - defunct   Цитата(aaarrr @ Aug 19 2008, 01:40) А это...   Aug 18 2008, 22:50
|||- - aaarrr   Цитата(defunct @ Aug 19 2008, 02:50) Фраз...   Aug 18 2008, 23:03
|||- - defunct   Цитата(aaarrr @ Aug 19 2008, 02:03) ОК. И...   Aug 18 2008, 23:19
|||- - aaarrr   Цитата(defunct @ Aug 19 2008, 03:19) нет ...   Aug 18 2008, 23:32
|||- - defunct   Цитата(aaarrr @ Aug 19 2008, 02:32) Стран...   Aug 18 2008, 23:57
|||- - aaarrr   Цитата(defunct @ Aug 19 2008, 03:57) Там ...   Aug 19 2008, 00:09
|||- - defunct   Цитата(aaarrr @ Aug 19 2008, 03:09) но пр...   Aug 19 2008, 00:17
||- - zltigo   Цитата(defunct @ Aug 19 2008, 00:40) Как ...   Aug 18 2008, 22:52
||- - defunct   Цитата(zltigo @ Aug 19 2008, 01:52) Тфу, ...   Aug 18 2008, 23:01
||- - zltigo   Цитата(defunct @ Aug 19 2008, 01:01) Быва...   Aug 18 2008, 23:24
- - aaarrr   Цитата(zltigo @ Aug 19 2008, 01:05) Челов...   Aug 18 2008, 21:52
- - sergeeff   Я бы несколько по-другому поставил вопрос. Полезно...   Aug 19 2008, 05:52
|- - SergeiCh   Цитата(sergeeff @ Aug 19 2008, 12:52) Пол...   Aug 19 2008, 06:40
- - aaarrr   Тем, кто имеет слабость лениться думать самостояте...   Aug 19 2008, 06:15
|- - zltigo   Цитата(aaarrr @ Aug 19 2008, 08:15) Тем, ...   Aug 19 2008, 08:52
|- - defunct   Цитата(zltigo @ Aug 19 2008, 11:52) это е...   Aug 19 2008, 10:34
|- - aaarrr   Цитата(defunct @ Aug 19 2008, 14:34) Каче...   Aug 19 2008, 11:19
||- - defunct   Цитата(aaarrr @ Aug 19 2008, 14:19) По по...   Aug 19 2008, 12:18
||- - aaarrr   Цитата(defunct @ Aug 19 2008, 16:18) Прав...   Aug 19 2008, 12:34
|- - zltigo   Цитата(defunct @ Aug 19 2008, 12:34) inli...   Aug 19 2008, 12:42
|- - defunct   Цитата(zltigo @ Aug 19 2008, 15:42) Не со...   Aug 20 2008, 00:09
|- - zltigo   Цитата(defunct @ Aug 20 2008, 02:09) Вопр...   Aug 20 2008, 09:26
- - asket   Работаю в Crossworks, хотелось бы поработать с lib...   Aug 19 2008, 07:53
- - aaarrr   Цитата(asket @ Aug 19 2008, 11:53) Работа...   Aug 19 2008, 08:36


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

 


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


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