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

 
 
> SSC в AT91SAM, Помогите разобратся
Pat
сообщение Sep 21 2005, 20:23
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480



Суть проблеммы:
не могу сгенерировать на выходе TF импульсный сигнал синхронизации,
уже 3 дня мыкаюсь.
Самое гланое что не работают только режимы
0x1 Negative Pulse Output
0x2 Positive Pulse Output
которые устанавливаются в битовых полях FSOS: (Transmit Frame Sync Output Selection)
регистра SSC_TFMR
Остальные режимы работают без проблем

0x3 Driven Low during data transfer Output
0x4 Driven High during data transfer Output
0x5 Toggling at each start of data transfer Output

Вот пример функции инициализации чего тут не так? Может кто подскажет

//-----------------------------------------------------------------------
// Настраиваем SSC
//-----------------------------------------------------------------------
void ssc_init(void)
{
// Подключаем мастер клок к SSC в блоке управления энергопотреблением
// Бит 8 (AT91C_ID_SSC) регистра PMC_PCER включает SSC
AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_SSC);
// Выводы RD | RK | RF | TD | TK | TF подключены к переферийной шине А
// Отключаем управление выходными портами МК от PIO
AT91C_BASE_PIOA->PIO_PDR = (RD | RK | RF | TD | TK | TF);
// Подключаем переферийную шину к выходным портам МК
AT91C_BASE_PIOA->PIO_ASR = (RD | RK | RF | TD | TK | TF);
// Включаем подтягивающие резисторы
pa_pullup_set((RD | RK | RF | TK));

// Настраиваем SSC
// Отключаем прерывания
AT91C_BASE_SSC->SSC_IDR = (unsigned int) -1;
// Сбрасываем SSC
AT91C_BASE_SSC->SSC_CR = AT91C_SSC_SWRST | AT91C_SSC_RXDIS | AT91C_SSC_TXDIS ;

// Отключаем внутренний генератор
// Сбрасываем делитель частоты
AT91C_BASE_SSC->SSC_CMR = 0;

// Настраиваем приемник
//....................
// регистр SSC_RCMR
//....................
// Приемник получает тактовые импульсы от входа RK
AT91C_BASE_SSC->SSC_RCMR = AT91C_SSC_CKS_RK;
// по умолчанию SSC_RCMR:CKO = 0 используется только в мастер режиме
// AT91C_BASE_SSC->SSC_RCMR |= AT91C_SSC_CKI;
// по умолчанию SSC_RCMR:CKI = 0 принимает данные по заднему фронту SCLK
// так как данные из Ad73360 передаются по переднему фронту SCLK
// принимаем данные по заднему фронту SCLK (по умолчанию)
// AT91C_BASE_SSC->SSC_RCMR |= AT91C_SSC_CKI;
// Задний фронт на выводе RF служит условием старта для приема данных
AT91C_BASE_SSC->SSC_RCMR |= AT91C_SSC_START_FALL_RF;
// SSC_RCMR:STTDLY = 0 (по умолчанию) нет задержки для приема данных
// после выполнения условия старт
// SSC_RCMR:PERIOD = 0 (по умолчанию) нет задержки установки сигнала RF

//....................
// регистр SSC_RFMR
//....................
// Устанавливаем количество бит которые необходимо принять
// Длина задается из условия DATALEN + 1
// Если DATALEN = от 1 до 7 то будет принят байт (8 бит)
// Если DATALEN = от 8 до 15 то будет принято 2 байта (16 бит)
// Если DATALEN = от 16 до 31 то будет принято 4 байта (32 бита)
AT91C_BASE_SSC->SSC_RFMR = 15;
// Режим эха отключен SSC_RFMR:LOOP = 0
// Прием данных осушествляем старшим битом вперед
AT91C_BASE_SSC->SSC_RFMR |= AT91C_SSC_MSBF;
// Длительность TF 1 период синхронизации
AT91C_BASE_SSC->SSC_RFMR |= (1<<16);
// Устанавливаем количество слов которые необходимо принять
AT91C_BASE_SSC->SSC_RFMR |= (((1-1)<<8) & AT91C_SSC_DATNB);

// Настраиваем передатчик
//....................
// регистр SSC_TCMR
//....................
// Передатчик получает тактовые импульсы от входа RK
AT91C_BASE_SSC->SSC_TCMR = 0x01;
// по умолчанию SSC_TCMR:CKO = 0 используется только в мастер режиме
// SSC_ТCMR:CKI = 1 передаем данные по переднему фронту SCLK
// так как Ad73360 принимает данные по заднему фронту SCLK то
// прередаем данные по переднему фронту SCLK
AT91C_BASE_SSC->SSC_TCMR |= AT91C_SSC_CKI;
// Условием старта передатчика служит запись в SSC_THR регистр
// по умолчанию SSC_TCMR:START = 0
AT91C_BASE_SSC->SSC_TCMR |= AT91C_SSC_START_TX;//AT91C_SSC_START_CONTINOUS;//AT91C_SSC_START_FALL_RF;
// SSC_TCMR:STTDLY = 0 (по умолчанию) нет задержки для передачи данных
// после выполнения условия старт
// AT91C_BASE_SSC->SSC_TCMR |= ((1<<16) & AT91C_SSC_STTDLY);
//....................
// регистр SSC_TFMR
//....................
// Устанавливаем количество бит которые необходимо передать
// Длина задается из условия DATALEN + 1
// Если DATALEN = от 1 до 7 то будет принят байт (8 бит)
// Если DATALEN = от 8 до 15 то будет принято 2 байта (16 бит)
// Если DATALEN = от 16 до 31 то будет принято 4 байта (32 бита)
// DATALEN
AT91C_BASE_SSC->SSC_TFMR = 15;
// DATDEF Уровень на выходе TD во время ожидания
AT91C_BASE_SSC->SSC_TFMR |= (0<<5);
// MSBF Передаем данные старшим битом вперед
AT91C_BASE_SSC->SSC_TFMR |= AT91C_SSC_MSBF;
// DATNB Количество слов которые должны быть переданы после каждого условия START
AT91C_BASE_SSC->SSC_TFMR |= (((1-1)<<8) & AT91C_SSC_DATNB);
// FSLEN Длительность TF 1 период синхронизации
AT91C_BASE_SSC->SSC_TFMR |= (0<<16);
// FSOS Синхронизация передачи данных на выходе TF положительным импульсом
AT91C_BASE_SSC->SSC_TFMR |= AT91C_SSC_FSOS_POSITIVE;
// FSDEN Управление линией TD во время формирования сигнала TF
AT91C_BASE_SSC->SSC_TFMR |= ((0<<23) & AT91C_SSC_FSDEN );
// FSEDGE Управление линией TD во время формирования сигнала TF
AT91C_BASE_SSC->SSC_TFMR |= ((0<<23) & AT91C_SSC_FSDEN );

// Включаем приемник
AT91C_BASE_SSC->SSC_CR = AT91C_SSC_RXEN;
// Включаем передатчик
AT91C_BASE_SSC->SSC_CR = AT91C_SSC_TXEN;

// Данные из AD73360 передаются по переднему фронту SCLK, первый старший бит
}//end ssc_init
Это все необходимо для АЦП AD73360
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 1)
Pat
сообщение Sep 24 2005, 12:05
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480



Сам разобрался не хватало установки
AT91C_BASE_SSC->SSC_TCMR |= ((7<<24) & AT91C_SSC_PERIOD);
Времени убил конечно немеряно.
Go to the top of the page
 
+Quote Post

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

 


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


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