|
at91, помогите разобраться |
|
|
|
Aug 15 2008, 19:08
|

Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
 |
Ответов
|
Aug 15 2008, 19:32
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(i.dmitry @ Aug 15 2008, 23:08)  правильно ли я понял, что AT91PS_PMC - указатель на структуру_AT91S_PMC. AT91C_BASE_PMC - ее начальный адресс, строчка в программе означает, в регистр PMC_SCER (по адресу AT91C_BASE_PMC + 5*AT91_REG) записать значение AT91C_PMC_UDP? Правильно, только адрес будет просто AT91C_BASE_PMC. Цитата(i.dmitry @ Aug 15 2008, 23:08)  как компилятор узнает адрес регистра AIC_IDCR? Код pAic->AIC_IDCR = mask; ведь pAic это есть AT91PS_AIC, но на какой начальный адрес он указывает НЕТ в библиотеке Функция принимает этот адрес как параметр, в чем проблема? P.S. А lib_AT91SAM7S256.h лучше не использовать - код сразу станет нечитаемым.
|
|
|
|
|
Aug 16 2008, 22:32
|

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

|
Цитата(aaarrr @ Aug 15 2008, 22:32)  P.S. А lib_AT91SAM7S256.h лучше не использовать - код сразу станет нечитаемым. Я напротив, считаю что библиотеку использовать стоит. Это только с непривычки и если использовать текстовый редактор типа "notepad" - тогда будет нечитаемо. А если редактор нормальный, и показывает тело функций при наведении на них, то нет проблем, сразу видно и параметры и коментарии к каждому параметру. Да и имена функций сами говорят за себя. Цитата ведь pAic это есть AT91PS_AIC, но на какой начальный адрес он указывает НЕТ в библиотеке pAic это параметр функции, указатель на структуру AT91S_AIC (в объявлении типа они добавляют P перед S, и получается AT91PS_AIC - AT91 Pointer to Struct AIC) . Адрес самого AIC'а указан в библиотеке как AT91C_BASE_AIC. Зачем так сделано - на случай если вдруг будет несколько AIC'ов. Как например есть несколько каналов DMA. Можете как для себя переопределить узлы с которыми работаете как #define pAic AT91C_BASE_AIC и т.п. А вообще если разобраться с библиотекой то код получается мало того что хорошо читаемый, так еще и запуск/настройка любого периферийного узла занимает максимум 5 минут (с открытой страницей даташита и поиском по библиотеке).
|
|
|
|
|
Aug 16 2008, 22:44
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(defunct @ Aug 17 2008, 02:32)  А если редактор нормальный, и показывает тело функций при наведении на них, то нет проблем, сразу видно и параметры и коментарии к каждому параметру. Да и имена функций сами говорят за себя. Скажите, а форум мне покажет тело функции при наведении на нее? Да и функции тупейшие, смысла их использовать просто нет. Цитата(defunct @ Aug 17 2008, 02:32)  Можете как для себя переопределить узлы с которыми работаете как
#define pAic AT91C_BASE_AIC Гениально! Врагу не пожелаю разбираться с таким кодом. Цитата(defunct @ Aug 17 2008, 02:32)  А вообще если разобраться с библиотекой то код получается мало того что хорошо читаемый, так еще и запуск/настройка любого периферийного узла занимает максимум 5 минут (с открытой страницей даташита и поиском по библиотеке).  Запустите мне USB или EMAC за 5 минут, пожалуйста.
|
|
|
|
|
Aug 16 2008, 23:00
|

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

|
Цитата Скажите, а форум мне покажет тело функции при наведении на нее? Копируем текст в свой любимый редактор, наводимся - и все как на ладони. Библиотека то стандартная. Цитата Да и функции тупейшие, смысла их использовать просто нет. Почему же тупейшие, смею обратить ваше внимание на AT91F_PDC_ReceiveFrameгениальная функция, лучше не придумаешь. По ней сразу видно как надо работать с DMA даже без вникания в ДШ. И таких премеров много. Цитата(aaarrr @ Aug 17 2008, 01:44)  Гениально! Врагу не пожелаю разбираться с таким кодом. пример Код // Absolute IO access macros #define pPIOA AT91C_BASE_PIOA
pPIOA->PIO_PER = LED0 | LED1 | LED2 | LED3; pPIOA->PIO_CODR = LED0 | LED1 | LED2 | LED3; // set level low трудно читаемо? При написании кода есть неоспоримые плюсы. 1. Писать быстрее - имя периферийного модуля задано так как удобно мне, code completion делает все остальное. (pPIOA-> редактор дает список всех регистров именно этого периферийного модуля, остается только выбрать). 2. Возможных механических ошибок меньше. При написании pPIOA редактор показывает описание структуры (а следовательно сразу видно коментарии к регистрам), и не нужно помнить какой за что отвечает. Цитата Запустите мне USB или EMAC за 5 минут, пожалуйста. Это пожалуй исключения. Для этих модулей я и сам предпочел не использовать AT91F функции. Но для всего остального, PMC, PDC, AIC, PIO, TIMERS, SPI, UART и т.п.. почему бы и нет. Экономит время.
|
|
|
|
|
Aug 16 2008, 23:27
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(defunct @ Aug 17 2008, 03:00)  Копируем текст в свой любимый редактор, наводимся - и все как на ладони. Библиотека то стандартная. В своем любимом редакторе я не использую lib_AT91. И не думаю, что это моя проблема. Цитата(defunct @ Aug 17 2008, 03:00)  Почему же тупейшие. посмотрите AT91F_PDC_ReceiveFrame гениальная функция, лучше не придумаешь. Посмотрел. Описание функции в стиле copy->paste  Ничего гениального в ней не вижу, хоть убейте. Цитата(defunct @ Aug 17 2008, 03:00)  пример Код // Absolute IO access macros #define pPIOA AT91C_BASE_PIOA
pPIOA->PIO_PER = LED0 | LED1 | LED2 | LED3; pPIOA->PIO_CODR = LED0 | LED1 | LED2 | LED3; // set level low трудно читаемо? А зачем - чтобы меньше буков писать? Тогда уж лучше так, без размножения сущностей: Код *AT91C_PIOA_PER = LED0 | LED1 | LED2 | LED3; *AT91C_PIOA_CODR = LED0 | LED1 | LED2 | LED3; // set level low Цитата(defunct @ Aug 17 2008, 03:00)  Это пожалуй исключения. Для этих модулей я и сам предпочел не использовал AT91F функции. Но для всего остального, PMC, PDC, AIC PIO, TIMERS, SPI, UART. почему бы и нет. Экономит время. Да не может оно съэкономить время. Сначала придется потратить время на изучение этой требухи, а затем на подглядывание. Написать все самостоятельно будет быстрее.
|
|
|
|
|
Aug 16 2008, 23:49
|

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

|
Цитата(aaarrr @ Aug 17 2008, 02:27)  В своем любимом редакторе я не использую lib_AT91. И не думаю, что это моя проблема. Это предмет личных предпочтений, а никак не повод для обвинения библиотеки в трудночитаемом коде. Цитата Посмотрел. Описание функции в стиле copy->paste  Ничего гениального в ней не вижу, хоть убейте. Там алгоритм загрузки указателей DMA. Можно ничего не читая про DMA правильно с ним работать! В этом и прелесть. Цитата А зачем - чтобы меньше буков писать? Тогда уж лучше так, без размножения сущностей: Код *AT91C_PIOA_PER = LED0 | LED1 | LED2 | LED3; *AT91C_PIOA_CODR = LED0 | LED1 | LED2 | LED3; // set level low Дык, тут буков больше! в моем варианте, набор набираемых мной любимым буков: pPI[enter]->PIO_x[enter] (12 и них 4 "->" и "enter" повторяющиеся) в вашем: *AT91C_PIOA_x[enter] (14 из них 1 "enter" повторяющийся) Цитата Да не может оно съэкономить время. Сначала придется потратить время на изучение этой требухи, а затем на подглядывание. Написать все самостоятельно будет быстрее. Подглядывать придется в обоих случаях, как минимум определения регистров искать. Имена библиотечных функций отражают ровно то, что делают функции. AT91F_ADC_CfgTimings AT91F_ADC_EnableChannel AT91F_TC_Open AT91F_PIO_CfgOpendrain и т.п. делают то, что написано простым англ. языком . Как осмысленные названия функций могут быть менее читаемыми чем использование регистров? Неужели *AT91C_PMC_PCDR = 1 << AT91C_ID_TWI; прозрачнее для понимания чем AT91F_PMC_DisablePeriphClock( pPMC, 1 << AT91C_ID_TWI); Взгляните на это с т.з. человека который в глаза не видел AT91 раньше, и первый раз смотрит на код.
|
|
|
|
Сообщений в этой теме
i.dmitry at91 Aug 15 2008, 19:08      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 zltigo Цитатаzltigo и aaarrr
Я там выше прикрепил рисунок... Aug 18 2008, 21:30 defunct Цитата(zltigo @ Aug 19 2008, 00:30) Проси... Aug 18 2008, 21:36  zltigo Цитата(defunct @ Aug 18 2008, 23:36) Драс... Aug 18 2008, 21:57   aaarrr Цитата(zltigo @ Aug 19 2008, 01:54) Зачем... Aug 18 2008, 21:57    zltigo Цитата(aaarrr @ Aug 18 2008, 23:57) А тут... Aug 18 2008, 22:06   defunct Цитата(zltigo @ Aug 19 2008, 00:54) Вы по... Aug 18 2008, 21:58    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    zltigo Цитата(defunct @ Aug 18 2008, 23:58) т.е.... Aug 18 2008, 22:10     defunct Цитата(zltigo @ Aug 19 2008, 01:10) pNAME... Aug 18 2008, 22:16      zltigo Цитата(defunct @ Aug 19 2008, 00:16) это ... Aug 18 2008, 22:28 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|