|
|
 |
Ответов
|
Feb 15 2007, 07:26
|
Частый гость
 
Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429

|
Цитата(Kitsok @ Feb 12 2007, 21:01)  Цитата(Karl @ Feb 7 2007, 08:44)  Спасибо, вроде разобрался. Заработало.
Добрый день! А можете код показать? Удалось ли принимать данные с использованием PDC? Да, передачу и прием по PDC организовать удалось. Проблемы, как оказалось, были не с PDC, а с некорректной работой с SPI. Инициализация SPI: Код void SPI_ini(void) {
AT91F_SPI_Reset(AT91C_BASE_SPI); //delay_ms(5); // Инициализация SPI. Запустим на работу с частотой примерно 2,5 МГц // Конфигурация канала АЦП (2 канал) AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_SPI); // Тактирование на SPI AT91F_SPI_CfgMode(AT91C_BASE_SPI, 1<<0| //Интерфейс работает в режиме ведущего. 0<<1| //Фиксированный выбор корпуса внешнего периферийного устройства. 0<<2| //PCSDEC: Декодирование выбора корпуса 0 = Периферийные устройства непосредственно подключены к выводам выбора корпуса. 0<<4| //MODFDIS: Определение ошибки режима работы 0 =Определение ошибки режима работы запрещено. 0<<7| // Зацикливание 0 - отключено 0xb<<16); // PCS: Выбор корпуса периферии Корпус 3 AT91F_SPI_CfgCs(AT91C_BASE_SPI,2, AT91C_SPI_BITS_8| // 8 бит в пакете 400<<8| // Частота SPI в 20 наза меньше MCK (необходимо не более 2,5 МГц) 2<<16| // Задержка перед выдачей тактовой частоты 0<<24| // Задержка между последовательными передачами данных 1<<1);
AT91F_SPI_Enable(AT91C_BASE_SPI); AT91F_PDC_Open(AT91C_BASE_PDC_SPI); } Собственно работа: Код for(;;)
{ while(AT91F_SPI_SendFrame(AT91C_BASE_SPI,(char*) &SPI_buf_TX[0],sizeof(SPI_buf_TX),0,0) == 0); u08 a = AT91F_SPI_ReceiveFrame(AT91C_BASE_SPI,(char*) &SPI_buf_RX[0],sizeof(SPI_buf_TX),0,0); // Ожидаем, пока приемный буфер заполнится. В дальнейшем включу на прерывание. while(!( a = AT91C_BASE_SPI->SPI_SR & AT91C_SPI_ENDRX)); ... ... ... }
|
|
|
|
|
Feb 15 2007, 19:59
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
Цитата Собственно работа: Код for(;;)
{ while(AT91F_SPI_SendFrame(AT91C_BASE_SPI,(char*) &SPI_buf_TX[0],sizeof(SPI_buf_TX),0,0) == 0); u08 a = AT91F_SPI_ReceiveFrame(AT91C_BASE_SPI,(char*) &SPI_buf_RX[0],sizeof(SPI_buf_TX),0,0); // Ожидаем, пока приемный буфер заполнится. В дальнейшем включу на прерывание. while(!( a = AT91C_BASE_SPI->SPI_SR & AT91C_SPI_ENDRX)); ... ... ... } Кстати абсолютно не вижу кайфа в такой конструкции. ДМА гонит данные, ядро ожидает завершения. Точно так же можно использовать и программные счетчик и указатель. Чтобы действительно получить выигрыш, флажок завершения приема/передачи надо прицепить к прерыванию. В таком случае действительно ДМА будет жить своей жизнью, а ядро отвлекаться на подготовку/обработку данных один раз на фрейм, а в остальное время заниматься чем-то полезным.
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
Feb 16 2007, 11:46
|
Местный
  
Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136

|
Цитата(beer_warrior @ Feb 15 2007, 19:59)  Кстати абсолютно не вижу кайфа в такой конструкции. ДМА гонит данные, ядро ожидает завершения. Точно так же можно использовать и программные счетчик и указатель. Чтобы действительно получить выигрыш, флажок завершения приема/передачи надо прицепить к прерыванию. В таком случае действительно ДМА будет жить своей жизнью, а ядро отвлекаться на подготовку/обработку данных один раз на фрейм, а в остальное время заниматься чем-то полезным. Ну почему-же нету кайфа. Я например под FreeRTOS клепаю, так у меня, пока данные не готовы, будет отдаваться выполнение другим задачам  Другой вопрос меня интересует, может доку не внимательно читал. Вот допустим, я так сделал железо, что один и тот-же ChipSelect у меня работает и на передачу и на прием (разнос по сигналами MOSI/MISO). Запускаю я одновременно и передачу и прием. SPI может дупелксно и передавать и принимать?
|
|
|
|
|
Feb 16 2007, 12:53
|
Частый гость
 
Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429

|
Цитата(Kitsok @ Feb 16 2007, 13:46)  Вот допустим, я так сделал железо, что один и тот-же ChipSelect у меня работает и на передачу и на прием (разнос по сигналами MOSI/MISO). Запускаю я одновременно и передачу и прием. SPI может дупелксно и передавать и принимать? SPI работает в дуплексном режиме. По каждому тактовому сигналу один битик передается и один принимается.
|
|
|
|
Сообщений в этой теме
Abakt DMA - для чего он и как его использовать Jan 30 2007, 22:39 beer_warrior DMA aka Direct Memory Access - дает возможность п... Jan 31 2007, 01:07 Abakt Спасибо. подскажите апноут какой нить чтоб посмотр... Jan 31 2007, 01:20 Abakt и какова скорость приема дданных ? например по пар... Jan 31 2007, 01:45 defunct DMA - это маленький простеникий и тупой slave сопр... Jan 31 2007, 02:36 zltigo Цитата(defunct @ Jan 31 2007, 01:36) Доми... Jan 31 2007, 20:34 beer_warrior ЦитатаСпасибо. подскажите апноут какой нить чтоб п... Jan 31 2007, 10:27 Abakt большое спасибо за помощь. сижу разбираюсь. Jan 31 2007, 11:40 Dron_Gus Цитата(zltigo @ Jan 31 2007, 20:34) C сто... Jan 31 2007, 22:17 beer_warrior ЦитатаC сточностью до наоборот - курить будет проц... Jan 31 2007, 22:35 ASN zltigo
Режим работы контроллера DMA определяется ... Jan 31 2007, 23:05 sonycman Цитата(beer_warrior @ Jan 31 2007, 23:35)... Feb 1 2007, 00:40  Karl Помогите, пожалуйста, с конкретной задачей: Необхо... Feb 1 2007, 08:49   Kitsok Цитата(Karl @ Feb 1 2007, 08:49) Помогите... Feb 1 2007, 12:23    Karl Спасибо, вроде все понятно. А с приемом Вы не разб... Feb 1 2007, 13:26     Kitsok Цитата(Karl @ Feb 1 2007, 13:26) Спасибо,... Feb 1 2007, 14:08      Karl Цитата(Kitsok @ Feb 1 2007, 16:08) Цитата... Feb 1 2007, 16:47       Kitsok Это инициализация
Код#define NCHANNELS 8
extern ... Feb 2 2007, 11:48        Karl Можно ли одновременно передавать массив данных в S... Feb 6 2007, 13:16         Kitsok Цитата(Karl @ Feb 6 2007, 13:16) Можно ли... Feb 6 2007, 15:28          Karl Цитата(Kitsok @ Feb 6 2007, 17:28) Цитата... Feb 7 2007, 08:44           Kitsok Цитата(Karl @ Feb 7 2007, 08:44) Спасибо,... Feb 12 2007, 19:01  zltigo Цитата(sonycman @ Jan 31 2007, 23:40) The... Feb 1 2007, 19:38   defunct Цитата(zltigo @ Feb 1 2007, 18:38) Причем... Feb 2 2007, 01:46 Dron_Gus Цитата(Kitsok @ Feb 1 2007, 14:08) Нет, м... Feb 1 2007, 14:53 Kitsok Спасибо большое!
Я так и думал, что в общем-т... Feb 15 2007, 18:55  Karl Цитата(beer_warrior @ Feb 15 2007, 21:59)... Feb 16 2007, 09:29   HARMHARM Цитата(Kitsok @ Feb 16 2007, 10:46) Друго... Feb 16 2007, 12:39    Kitsok Цитата(Karl @ Feb 16 2007, 12:53) SPI раб... Feb 20 2007, 01:03     Karl Цитата(Kitsok @ Feb 20 2007, 03:03) Цитат... Feb 20 2007, 06:54      Kitsok Всем привет!
Вчера вперся в непонятную пробле... Feb 20 2007, 12:23 Slonic Подскажите, пожалуйста, можно ли использовать DMA ... Feb 16 2007, 14:35 Dron_Gus А обьясните мне глупому по PDC у SAM7. Предположим... Feb 20 2007, 17:21 Сергей Борщ Цитата(Dron_Gus @ Feb 20 2007, 16:21) Зна... Feb 20 2007, 18:01
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|