Перейти к содержанию
    

SSC в AT91SAM

Суть проблеммы:

не могу сгенерировать на выходе 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сам разобрался не хватало установки

AT91C_BASE_SSC->SSC_TCMR |= ((7<<24) & AT91C_SSC_PERIOD);

Времени убил конечно немеряно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...