|
|
  |
Прерывание на SAM7s, Нужен совет и помошь |
|
|
|
Mar 12 2008, 10:00
|
Участник

Группа: Участник
Сообщений: 59
Регистрация: 31-01-08
Пользователь №: 34 612

|
Есть микроконтролер AT91sam7s256 Задача: Получение прямоугольных импульсов от 1 Гц до 200 кГц с возможностью регулирования скважности.
Подскажите как проще сделать это.
Сам склоняюсь к использованию таймеров, но вот как оптимальней настроить и какие именно взять незнаю.
Кто знает подскажите, Зарание С П А С И Б О
Сообщение отредактировал en0t - Mar 12 2008, 10:00
|
|
|
|
|
Mar 12 2008, 10:32
|
Участник

Группа: Участник
Сообщений: 59
Регистрация: 31-01-08
Пользователь №: 34 612

|
не через ШИМ не получится т. к. в полученом сигнале пауза должна измерятся в микросекундах и соответственно изменятся тоже в них. Вобшем на выходе должен получится генератор прямоугольных импульсов. чёто типа вот этого: http://www.telesys.ru/electronics/projects.php?do=p072Может кто подскажет и покажет как настроить прерывание по переполнению таймер счётчика с частотой 200 кГц
|
|
|
|
|
Mar 12 2008, 10:39
|
Участник

Группа: Участник
Сообщений: 59
Регистрация: 31-01-08
Пользователь №: 34 612

|
Цитата(aaarrr @ Mar 12 2008, 13:36)  Не вижу связи между ШИМ'ом и микросекундами, поясните. Не Не Не ненадо о ШИМ'е я сразу его отмел, а вот о настройке прерывания если можно поподробней раскажите обьясните покажите.
|
|
|
|
|
Mar 12 2008, 10:43
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(en0t @ Mar 12 2008, 13:39)  ненадо о ШИМ'е я сразу его отмел Почему? Цитата(en0t @ Mar 12 2008, 13:39)  раскажите обьясните покажите.  Да легко. Вот только прерываться с частотой 200KHz не советую, впрочем, хозяин - барин. Для 48MHz MCK: Код void timer0_ini(void) { AT91C_BASE_PMC->PMC_PCER = (0x01 << AT91C_ID_TC0);
// Wave mode, MCK/8, UP mode with automatic trigger on RC Compare AT91C_BASE_TCB->TCB_TC0.TC_CMR = AT91C_TC_CLKS_TIMER_DIV2_CLOCK | AT91C_TC_WAVESEL_UP_AUTO | AT91C_TC_WAVE; AT91C_BASE_TCB->TCB_TC0.TC_RC = 29; AT91C_BASE_TCB->TCB_TC0.TC_CCR = AT91C_TC_CLKEN; AT91C_BASE_TCB->TCB_TC0.TC_IER = AT91C_TC_CPCS; AT91C_BASE_TCB->TCB_TC0.TC_CCR = AT91C_TC_SWTRG;
AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0] = 0x07; AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC0] = (u_int)tc0_irq_handler; }
|
|
|
|
|
Mar 12 2008, 10:54
|
Участник

Группа: Участник
Сообщений: 59
Регистрация: 31-01-08
Пользователь №: 34 612

|
насчёт шима всё просто , процесор должен выдавать несколько таких частот притом разных (от 3 до 12) вот я и подумал что проше всего использовать преполнение по т/c , вообшё планируется ипользование частот не более 10кГц , но для того чтобы чтото можно было регулировать на таких частотак длину паузы решил что для этого 200 кГц вполне должно хватить.
Скорей всего я выбрал путь не совсем правельный так что хотел услышать мнение профи как лутше это организоватью
|
|
|
|
|
Mar 12 2008, 11:56
|
Участник

Группа: Участник
Сообщений: 59
Регистрация: 31-01-08
Пользователь №: 34 612

|
Цитата(aaarrr @ Mar 12 2008, 13:43)  Почему?  Да легко. Вот только прерываться с частотой 200KHz не советую, впрочем, хозяин - барин. Для 48MHz MCK: Код void timer0_ini(void) { AT91C_BASE_PMC->PMC_PCER = (0x01 << AT91C_ID_TC0);
// Wave mode, MCK/8, UP mode with automatic trigger on RC Compare AT91C_BASE_TCB->TCB_TC0.TC_CMR = AT91C_TC_CLKS_TIMER_DIV2_CLOCK | AT91C_TC_WAVESEL_UP_AUTO | AT91C_TC_WAVE; AT91C_BASE_TCB->TCB_TC0.TC_RC = 29; AT91C_BASE_TCB->TCB_TC0.TC_CCR = AT91C_TC_CLKEN; AT91C_BASE_TCB->TCB_TC0.TC_IER = AT91C_TC_CPCS; AT91C_BASE_TCB->TCB_TC0.TC_CCR = AT91C_TC_SWTRG;
AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0] = 0x07; AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC0] = (u_int)tc0_irq_handler; } Может кто подскажет как это правельно в iar подвезать
|
|
|
|
|
Mar 12 2008, 13:22
|

Местный
  
Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719

|
Цитата(en0t @ Mar 12 2008, 14:56)  Может кто подскажет как это правельно в iar подвезать Из AT91C_BASE_TCB->TCB_TC0.TC_CMR = AT91C_TC_CLKS_TIMER_DIV2_CLOCK | AT91C_TC_WAVESEL_UP_AUTO | AT91C_TC_WAVE; делаем AT91C_BASE_TC0 -> TC_CMR = AT91C_TC_CLKS_TIMER_DIV2_CLOCK | AT91C_TC_WAVESEL_UP_AUTO | AT91C_TC_WAVE; и т.д.
|
|
|
|
|
Mar 12 2008, 19:33
|

Частый гость
 
Группа: Новичок
Сообщений: 111
Регистрация: 10-02-07
Из: St.Petersburg, Russia
Пользователь №: 25 241

|
Цитата(en0t @ Mar 12 2008, 13:00)  Есть микроконтролер AT91sam7s256 Задача: Получение прямоугольных импульсов от 1 Гц до 200 кГц с возможностью регулирования скважности.
Подскажите как проще сделать это.
Сам склоняюсь к использованию таймеров, но вот как оптимальней настроить и какие именно взять незнаю.
Кто знает подскажите, Зарание С П А С И Б О С П А С И Б О не булькает. Его в стакан не нальёшь. И в карман не положишь. Цитата(en0t @ Mar 12 2008, 13:32)  не через ШИМ не получится т. к. в полученом сигнале пауза должна измерятся в микросекундах и соответственно изменятся тоже в них. Ассемблер с подчётом программы по тактам никто не отменял.
--------------------
[ZX]
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|