Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Работа с системой событий Xmega32A4
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
evsx1
Здравствуйте, возник вопрос по работе с системой событий в Xmega. Необходимо считать импульсы по 4 каналам, приходящие на PORTC, в контроллере можно считать по прерыванию всего по 2м пинам на порту, поэтому было решено под эти задачи использовать Таймер/Счетчик'и. Для этого настраиваю необходимые пины PORTC на вход, генерация события по спадающему фронту с передачей их таймеру счетчику. И вот тут вопрос: мне придется использовать также 4ре счетных канала для счета P TCC0&1 TCD0&1, просто на таймере 0 по PORTC мне это можно каким-нибудь образом сделать? Сейчас я выбираю четыре раздельных источника для каждого таймера.

Код
int CH1,CH2,CH3,CH4;
void CHANNEL_COUNT(void)
{  
  PORTC.DIR&=~0x78;
  //PORTC.DIRTGL=0x78;
  PORTC.PIN0CTRL = PORT_ISC_FALLING_gc; //обнаружение низкого уровня
  PORTC.PIN1CTRL = 0x03; //обнаружение низкого уровня
  EVSYS.CH0MUX = 0x66;   // передача  в первый мультемплексканал Count_CH1
  EVSYS.CH1MUX = 0x65;   // передача  в второй мультемплексканал Count_CH2
  EVSYS.CH2MUX = 0x64;   // передача  в третий мультемплексканал Count_CH3
  EVSYS.CH3MUX = 0x63;   // передача  в четвертый мультемплексканал Count_CH4
  EVSYS.CH1CTRL = 0x07; //
  EVSYS.CH2CTRL = 0x07;  //
  EVSYS.CH3CTRL = 0x07;  //максимальный цифровой фильтр на все каналы
  EVSYS.CH0CTRL = 0x07; //
  TCC0.PER = 0xFFFF;
  TCD0.PER = 0xFFFF;
  TCC1.PER = 0xFFFF;      // переполнение после полного заполнения 16бит
  TCD1.PER = 0xFFFF;
  TCD0.CTRLA = TC_CLKSEL_EVCH0_gc;    // CNT таймера Д0 содержит счет CH1
  TCC0.CTRLA = TC_CLKSEL_EVCH1_gc;    // CNT таймера C0 содержит счет CH2
  TCC1.CTRLA = TC_CLKSEL_EVCH2_gc;    // CNT таймера C1 содержит счет CH3
  TCD1.CTRLA = TC_CLKSEL_EVCH3_gc;    // CNT таймера Д1 содержит счет CH4
  
  CH1=TCD0.CNT;  
  CH2=TCD0.CNT;
  CH3=TCD0.CNT;      // запись значения
  CH4=TCD0.CNT;
  
}
bob1
Если Вам нужен раздельный счет, то придется использовать 4 канала событий и 4 счетчика.
Если результаты потом складываются , то 4 канала и 1 счетчик.
evsx1
Цитата(bob1 @ Jun 25 2013, 13:48) *
Если Вам нужен раздельный счет, то придется использовать 4 канала событий и 4 счетчика.
Если результаты потом складываются , то 4 канала и 1 счетчик.

Да необходим раздельный счет.
Спасибо а возможно ли реализовать счет до 32бит слова.?
_Артём_
Цитата(evsx1 @ Jun 25 2013, 12:53) *
Спасибо а возможно ли реализовать счет до 32бит слова.?

Цитата
Two timer/counters can be used together to enable 32-bit counter operation. By using two timer/counters, the overflow
event from one timer/counter (least-significant timer) can be routed via the event system and used as the clock input for
another timer/counter (most-significant timer).
evsx1
Это мы знаем,но чтобы считать 4 канала по 32 необходимо 8 таймеров,а у XmegaA4 5. Думаю стоит ли делать два канала по прерыванию по порту и два 32 разрядных счетчика или считать переполнение таймера?
Xenia
Переполнение 16-разрядных счетчиков вполне можно считать по-старинке - разрешить им прерывание по переполнению, а в обработчике этого прерывания инкрементировать переменную, предназначенную для старших разрядов счетчика (17-32). Такие прерывания уже не будут слишком частыми и производительности МК не снизят.

Метод же "стыковки таймеров" не только угробил бы все свободные таймеры под этот счет, но и все каналы событий. А то и другое обычно бывает жалко тратить дочиста.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.