|
|
  |
Как подключить ТС на тактирование от PA0, Проблема с BMR |
|
|
|
Feb 6 2008, 07:49
|

Участник

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

|
Как я понял от PA0 (TIOA0) может тактироваться лишь TC1 Я включил PA0 в режим B, в TC1 в TC_CMR тактирование от XC0 но как подключить ХС0 к PA0, в даташите сказано что надо именить TC_BMR но как модифицировать не понял,что попробовал не получилось. Подскажите как модифицировать BMR и что сделать дальше чтоб счетчик просто считал импульсы без прерывания.  ATSAM7S256 процессор
--------------------
|
|
|
|
|
Feb 6 2008, 09:14
|
Местный
  
Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970

|
-оффтоп- Уважаемый Тема, на этом форуме принято отписыватся, чем закончились поиски решения той либо иной проблемы, а не создавать темы и исчезать после получения ответов на вопросы. Другие люди могут столкнутся с подобными проблемами, и ветки форума помогут им решить их, а не просто приведут к мысли, что они во Вселенной не одиноки. p/s. 2zltigo : готов пройти профилактическое промывание  но уж больно много народу подобного появилось в последнее время
Сообщение отредактировал _dem - Feb 6 2008, 09:15
|
|
|
|
|
Feb 6 2008, 09:40
|

Участник

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

|
У меня ничего и не получилось...Не знаю про что вы говорите Код #define Q24 (1<<0) /* PA0 */ void AT91F_TC_Open (void) //* Begin { unsigned int dummy; //* First, enable the clock of the TIMER AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1<< AT91C_ID_TC1 ); //Config A and B mode in PIO AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA,0,Q24); //* Disable the clock and the interrupts AT91C_BASE_TC1->TC_CCR = AT91C_TC_CLKDIS; AT91C_BASE_TC1->TC_IDR = 0xFFFFFFFF; //* Clear status bit dummy = AT91C_BASE_TC1->TC_SR; //* Suppress warning variable "dummy" was set but never used dummy = dummy; //* Set the Mode of the Timer Counter AT91C_BASE_TC1->TC_CMR = AT91C_TC_CLKS_XC1; //* Set the TCB_BMR of the TIOA0 AT91C_BASE_TCB->TCB_BMR|=AT91C_TCB_TC1XC1S_TIOA0; //* Enable the clock AT91C_BASE_TC1->TC_CCR = AT91C_TC_CLKEN; } Вот код почему он не работает?
--------------------
|
|
|
|
|
Feb 6 2008, 10:14
|

Дух погибшего транзистора
   
Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288

|
Цитата(Тема @ Feb 6 2008, 12:40)  Вот код почему он не работает? Потому что он идиотский. Я не понял что конкретно вам нужно получить в итоге, поэтому отвечу только на один вопрос Как тактировать канал один1 от канала 0. Для этого нужно сконфигурировать канал 0 на генерацию импульсов нужной вам тактовой частоты. Код AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_TC0); // можно отдать внешний вывод таймеру и посмотреть на нашу тактовую частоту // AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, 0, AT91C_PA15_TIOA0);
AT91C_BASE_TC0->TC_CMR = prescalerMask | AT91C_TC_WAVE | AT91C_TC_WAVESEL_UP_AUTO | AT91C_TC_ACPA_CLEAR /* сброс tioa1 в начале работы */ | AT91C_TC_ACPC_SET /* установка в конце */ | AT91C_TC_ASWTRG_SET /* линии TIOA0 в 1 */
AT91C_BASE_TC0->TC_RA = 1; AT91C_BASE_TC0->TC_RC = interval+1; В блоке BCR XC1 либо XC2 как TIOA0 Код AT91C_BASE_TCB->TCB_BMR = AT91C_TCB_TC0XC0S_NONE | AT91C_TCB_TC1XC1S_TIOA0 | AT91C_TCB_TC2XC2S_NONE; сконфигурировать канал 1 на тактирование от XC1 либо XC2 Код AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_TC1); AT91C_BASE_TC1->TC_CMR = AT91C_TC_CLKS_XC1 | AT91C_TC_WAVE | AT91C_TC_WAVESEL_UP_AUTO | AT91C_TC_ACPA_CLEAR /* сброс tioa1 в начале работы */ | AT91C_TC_ACPC_SET /* установка в конце */ | AT91C_TC_ASWTRG_SET /* линии TIOA0 в 1 */
AT91C_BASE_TC1->TC_RA = 1; AT91C_BASE_TC1->TC_RC = interval+1; незабудьте только запустить это хозяйство.
--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
|
|
|
|
|
Feb 6 2008, 12:18
|

Участник

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

|
Цитата(SpiritDance @ Feb 6 2008, 15:14)  Потому что он идиотский. Я не понял что конкретно вам нужно получить в итоге, поэтому отвечу только на один вопрос Как тактировать канал один1 от канала 0. Для этого нужно сконфигурировать канал 0 на генерацию импульсов нужной вам тактовой частоты. Код AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_TC0); // можно отдать внешний вывод таймеру и посмотреть на нашу тактовую частоту // AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, 0, AT91C_PA15_TIOA0); AT91C_BASE_TC0->TC_CMR = prescalerMask | AT91C_TC_WAVE | AT91C_TC_WAVESEL_UP_AUTO | AT91C_TC_ACPA_CLEAR /* сброс tioa1 в начале работы */ | AT91C_TC_ACPC_SET /* установка в конце */ | AT91C_TC_ASWTRG_SET /* линии TIOA0 в 1 */
AT91C_BASE_TC0->TC_RA = 1; AT91C_BASE_TC0->TC_RC = interval+1; В блоке BCR XC1 либо XC2 как TIOA0 Код AT91C_BASE_TCB->TCB_BMR = AT91C_TCB_TC0XC0S_NONE | AT91C_TCB_TC1XC1S_TIOA0 | AT91C_TCB_TC2XC2S_NONE; сконфигурировать канал 1 на тактирование от XC1 либо XC2 Код AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_TC1); AT91C_BASE_TC1->TC_CMR = AT91C_TC_CLKS_XC1 | AT91C_TC_WAVE | AT91C_TC_WAVESEL_UP_AUTO | AT91C_TC_ACPA_CLEAR /* сброс tioa1 в начале работы */ | AT91C_TC_ACPC_SET /* установка в конце */ | AT91C_TC_ASWTRG_SET /* линии TIOA0 в 1 */
AT91C_BASE_TC1->TC_RA = 1; AT91C_BASE_TC1->TC_RC = interval+1; незабудьте только запустить это хозяйство. Мне таймер надо тактировать от внешних импульсов с PA0
--------------------
|
|
|
|
|
Feb 6 2008, 16:14
|

Дух погибшего транзистора
   
Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288

|
Цитата(Тема @ Feb 6 2008, 15:18)  Мне таймер надо тактировать от внешних импульсов с PA0 Это невозможно. С PA0 можно делать захват. Тактировать таймер можно с TCLK0. Это PA4. Например для канала 2. Код void set_timer_channel2_to_counter_mode(void) { /* назначаем обработчик прерывания в AIC */ AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, AT91C_ID_TC2, AIC_PRIOR_TIMER2, AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED, (void(*)(void)) ih_timer2_overflow);
/* разрешаем прерывание от канала 0 таймера-счетчика */ AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_TC2);
/* подключаем к каналу внешнюю частоту и включаем вывод */ AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_TC2); AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, 0, AT91C_PA29_TCLK2);
/* разрешаем преравыния по преполнению */ AT91F_TC_InterruptEnable(AT91C_BASE_TC2, AT91C_TC_COVFS);
/* счетчик внешних импульсов */ AT91C_BASE_TC2->TC_CMR = AT91C_TC_CLKS_XC2 | AT91C_TC_WAVESEL_UP_AUTO | AT91C_TC_LDRA_RISING; /* запускаем таймер */ AT91C_BASE_TC2->TC_CCR = AT91C_TC_CLKEN | AT91C_TC_SWTRG; }
--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
|
|
|
|
|
Feb 8 2008, 10:26
|

Дух погибшего транзистора
   
Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288

|
Цитата(Сергей Борщ @ Feb 7 2008, 15:29)  Мне казалось, что это название внутреннего сигнала. ну да. Только этот сигнал не сам по себе существует и отдельно от таймера его нельзя рассматривать. Цитата(Сергей Борщ @ Feb 7 2008, 15:29)  Читая даташит препятствий не видно, думал может у вас есть какие-то ссылки на другие места даташита, которые я пропустил. Да нет, мне просто логика подсказывает, что тактировать таймер с 2-х разных ног, наверное, плохо. Кстати, рад с Вами пообщаться, давно меня здесь не было.
--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|