|
Проблема с SSC в AT91SAM9260 |
|
|
|
Oct 5 2009, 17:31
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 21-07-08
Пользователь №: 39 116

|
Столкнулся со следующей проблемкой при работе с контроллером SSC (в AT91SAM9260). Конфигурация платы такая: - ножка TK0 соединена с ножкой PB0, которую я перевел в режим вывода, т.е. программно устанавливая на ней 0 или 1 я эмулирую тактовые импульсы на вход ТК0; TК0 конфигурируется как периферия А и сам блок SSC трансмиттера предполагается чтоб использовал эту ножку в качестве тактовых импульсов; - TF0 не используется, остается как обычная I/O в режиме входа; - с ТD0 снимаются данные, ножка конфигурируется как периферия А; - на RD0 поступают данные, конфигурируется как периферия А; - RK ножка используется для вывода тактовых импульсов трансмиттера; конфигурируется как периферия А; сам блок ресивера в качестве испульсов использует TK_clock; - RF не используется, остается как обычная I/O в режиме входа; В документации сказано, что можно в качестве TX_clock выбрать из трех сигналов, один из которых - внешний с ножки TF0, что я и делаю (прописывая CKS поле). Далее сказано, что на ножку RK0 можно выводить RX_clock, плюс этот сигнал может выводиться только в период когда активен прием, что я и делаю (СКО поле). Ставлю STTDLY = 0 для трансмиттера и ресивера, т.е. не использую синхронизационные фреймы. Признак начала (START) для трансмиттера ставлю CONTINUOS а для ресивера - TRANSMIT_START, т.е. трансмиттер должен начать передачу данных сразу же после записи в регистр THR и ресивер начать прием как только начнет работать трансмиттер. Выставляю длину данных - 8 бит (DATLEN=7 для трансмиттера и ресивера).
Вот код конфигурирования непосредственно SSC: #define AT91C_SSC_CKS_TK_PIN 0x02
AT91C_BASE_SSC0->SSC_IDR = 0xFFFFFFFF; AT91C_BASE_PMC->PMC_PCER = 0x01 << AT91C_ID_SSC0;
AT91C_BASE_SSC0->SSC_CR = AT91C_SSC_SWRST; AT91C_BASE_SSC0->SSC_CR = AT91C_SSC_RXDIS | AT91C_SSC_TXDIS; AT91C_BASE_SSC0->SSC_TFMR = AT91C_SSC_DATDEF | AT91C_SSC_MSBF | AT91C_SSC_FSOS_LOW; AT91C_BASE_SSC0->SSC_TCMR = AT91C_SSC_CKS_TK_PIN | AT91C_SSC_CKO_NONE | AT91C_SSC_START_CONTINOUS; AT91C_BASE_SSC0->SSC_RCMR = AT91C_SSC_CKS_TK | AT91C_SSC_CKO_DATA_TX | AT91C_SSC_CKI | AT91C_SSC_START_TK; AT91C_BASE_SSC0->SSC_RFMR = AT91C_SSC_MSBF; AT91C_BASE_SSC0->SSC_PTCR = AT91C_PDC_RXTDIS | AT91C_PDC_TXTDIS; AT91C_BASE_SSC0->SSC_CR = AT91C_SSC_RXEN | AT91C_SSC_TXEN;
AT91C_BASE_SSC0->SSC_TFMR = (AT91C_BASE_SSC0->SSC_TFMR & (~AT91C_SSC_DATLEN)) | (0x08 - 0x01); AT91C_BASE_SSC0->SSC_RFMR = (AT91C_BASE_SSC0->SSC_RFMR & (~AT91C_SSC_DATLEN)) | (0x08 - 0x01);
Дальше записываю данные в THR (THR = 00) и вручную тактирую TK0 ножку устанавливая 0 и 1 на PB0 ножке. И теперь странно - тестером меряю ножку TD0 - по идее на ней должен сразу же выводиться мой нолик который я записал в THR, на практике же он появляется там только на 4-й (!) тактовый импульс. Первые 3 такта на TD0 стоит единица. После этого (4й импульс) начинает выдвигаться число что я записал в THR (т.е. 0х00) и после 8-го бита TD0 возвращается в 1 (DATDEF я ставлю в 1) и уже остается в таком положении сколько бы тактов не подавать (что есть логично). Т.е. по документации должны СРАЗУ выйти 8 бит (ведь передачу синхронизации я выключил) а выходят первые три 1-цы и только потом уже 8 бит данных. Что не так??? Второе - меряю ножку RK0, которая по идее, в соответствии с документацией должна бы выводить сигнал только в момент когда активен прием (т.е. восемь тактов). Но на практике - на RK0 постоянно идет тактирование, т.е. истекли 8 тактов, ресивер по идее принял данные и уже должен остановиться - но нет, RK0 ножка, все равно, выводит тактовые импульсы бесконечно, как будто и не поставил я в CKO ресивера (CKO = AT91C_SSC_CKO_DATA_TX ) выводить импульсы только в момент когда трансакции активны. Ну что не так?????? Кто может что дельное подсказать, прошу откликнитесь. Первый раз работаю с SSC, не исключено что что-то упускаю.
|
|
|
|
|
 |
Ответов
|
Oct 5 2009, 19:53
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Albun @ Oct 5 2009, 21:31)  Дальше записываю данные в THR (THR = 00) и вручную тактирую TK0 ножку устанавливая 0 и 1 на PB0 ножке. И теперь странно - тестером меряю ножку TD0 - по идее на ней должен сразу же выводиться мой нолик который я записал в THR, на практике же он появляется там только на 4-й (!) тактовый импульс. Первые 3 такта на TD0 стоит единица. ИМХО, тут все логично. Никто не обещает, что данные начнут выдвигаться немедленно на первом же клоке внешнего сигнала. На синхронизацию, загрузку сдвигового регистра и т.п. нужно несколько тактов. Цитата(Albun @ Oct 5 2009, 21:31)  Но на практике - на RK0 постоянно идет тактирование, т.е. истекли 8 тактов, ресивер по идее принял данные и уже должен остановиться - но нет, RK0 ножка, все равно, выводит тактовые импульсы бесконечно, как будто и не поставил я в CKO ресивера (CKO = AT91C_SSC_CKO_DATA_TX ) выводить импульсы только в момент когда трансакции активны. Ну что не так?????? Трансмиттер лопатит постоянно, старт ресивера привязан к трансмиттеру - почему его клоки должны остановиться?
|
|
|
|
Сообщений в этой теме
Albun Проблема с SSC в AT91SAM9260 Oct 5 2009, 17:31 Albun Цитата(aaarrr @ Oct 5 2009, 22:53) Трансм... Oct 5 2009, 20:11  aaarrr Цитата(Albun @ Oct 6 2009, 00:11) Почему ... Oct 5 2009, 20:33   Albun Цитата(aaarrr @ Oct 5 2009, 23:33) А то, ... Oct 5 2009, 20:50    aaarrr Цитата(Albun @ Oct 6 2009, 00:50) Так вед... Oct 5 2009, 21:04     Albun Цитата(aaarrr @ Oct 6 2009, 00:04) SPI ма... Oct 5 2009, 21:10      aaarrr Цитата(Albun @ Oct 6 2009, 01:10) Слейв н... Oct 5 2009, 21:21       Albun Цитата(aaarrr @ Oct 6 2009, 00:21) Так со... Oct 5 2009, 21:28 aaarrr Ну, так можно сделать от силы два строба, и не оче... Oct 5 2009, 21:38 Albun На свежую голову подумал, действительно, нигде вед... Oct 6 2009, 18:41 Albun Пишу этот заключительный пост в надежде что это по... Oct 6 2009, 22:58 aaarrr Если рассматривать атмеловский SSC, то у меня полу... Oct 6 2009, 23:23 vmp Добавлю для полноты картинки (автору в его проблем... Oct 7 2009, 05:48
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|