Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сброс контроллера и ШИМ
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Timofey
Здраствуйте.

1. Подскажите пожалуйста как программно сбрасывать контроллер? Достаточно ли просто укзать строку AT91C_BASE_RSTC->RSTC_RCR=((0xA5 << 24) | 1) ? Нужно ли перед этим конфигурировать? А то там еще и настроечные регисттры есть .... Когда я сбрасываю контроллер этой строкой то у меня просто проц замолкает .... приходится на плате нажимать кнопочку "ресет" ....

2. Как правильно пользоваться RS-485? У меня на палте уже есть 485, я только настраиваю US1 на него и все. Но на входе и выходе данные почему то получаются не те.
Инициализация:
Код
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1<<AT91C_ID_US1 );
  AT91F_PIO_CfgPeriph(
     AT91C_BASE_PIOA,
     ((unsigned int) AT91C_PA21_RXD1    ) |
     ((unsigned int) AT91C_PA22_TXD1    ) |
                 ((unsigned int) AT91C_PA24_RTS1    ) ,
     0 );

  AT91C_BASE_US1->US_IDR = (unsigned int) -1;
  AT91C_BASE_US1->US_CR = AT91C_US_RSTRX
                                               | AT91C_US_RSTTX
                                               | AT91C_US_RXDIS
                                               |   AT91C_US_TXDIS;
  AT91F_US_SetBaudrate(AT91C_BASE_US1, MCK, USART_BAUD_RATE_14400);
  AT91F_US_SetTimeguard(AT91C_BASE_US1, 0);
  AT91F_PDC_Open((AT91PS_PDC) &(AT91C_BASE_US1->US_RPR));
  AT91C_BASE_US1->US_MR = AT91C_US_ASYNC_MODEmy;
  
  
AT91C_BASE_US1->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC,
                        AT91C_ID_US1,
                        USART_INTERRUPT_LEVEL,
                        AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,
                        Usart_c_irq_handler);
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US1);
AT91F_PDC_Open (AT91C_BASE_PDC_US1);
AT91C_BASE_US1->US_RPR = (unsigned int) BUFF_485_IN;
AT91C_BASE_US1->US_RCR = 100;
AT91C_BASE_US1->US_RTOR = 16;
AT91F_US_EnableIt(AT91C_BASE_US1,  AT91C_US_TIMEOUT );


}


Код
#define AT91C_US_ASYNC_MODEmy ( AT91C_US_USMODE_RS485 + \
                        AT91C_US_NBSTOP_1_BIT + \
                        AT91C_US_PAR_EVEN + \
                        AT91C_US_CHRL_8_BITS + \
                        AT91C_US_CLKS_CLOCK )


Отправляю просто набор байт с 0х00 до 0х0F и получаю на компе на входе: FF FD FB F9 F7 ... и тд до E1 .... В чем может быть проблема? Преобразователь на компе который стоит - работает нормально, проверен был ранее на других программах. Отправляю через PDC.

3. Как с помощью TC сделать какой-нибудь сигнал? Мне требуется формировать прямоугольные импульсы .... Может примерчик какой-нибудь маленький есть? Чтобы посмотреть как вобще строятся сигналы.
З.Ы. Забыл добавить .... Работаю в IAR плата с контролллером SAM7S64
SpiritDance
Цитата(Timofey @ Aug 30 2006, 08:27) *
3. Как с помощью TC сделать какой-нибудь сигнал? Мне требуется формировать прямоугольные импульсы .... Может примерчик какой-нибудь маленький есть? Чтобы посмотреть как вобще строятся сигналы.

Код
/*------------------------------------------------------------------------------------------------*/
void set_timer_channel2_to_frequency_output(void)
{
    unsigned short TimerValue;
    unsigned int   PrescalerID;

    AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_TC2);
    AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, 0, AT91C_PA26_TIOA2);

    TimerValue  = 2;                              /* ñðàáàòûâàíèå òðèããåðà ïîñëå 2 òàêòîâ */
    PrescalerID = AT91C_TC_CLKS_TIMER_DIV1_CLOCK; /* ÷àñòîòà MCK/2                        */

    /* óñòàíàâëèâàåì ïðåääåëèòåëü ÷àñòîòû è ðåæèì ãåíåðàöèè ïîâòîðÿþùèõñÿ èìïóëüñîâ, âêëþ÷àåì òðèããåð */
    AT91C_BASE_TC2->TC_CMR = PrescalerID
                             |
                             AT91C_TC_WAVE
                             |
                             AT91C_TC_WAVESEL_UP_AUTO
                             |
                             AT91C_TC_CPCTRG
                             |
                             AT91C_TC_ACPA_SET
                             |
                             AT91C_TC_ACPC_CLEAR;

    /* óñòàíàâëèâàåì ôîðìó ãåíåðèðóåìûõ èìïóëüñîâ íà âûõîäå TIOA2 */
    AT91C_BASE_TC2->TC_RA = TimerValue / 2;
    AT91C_BASE_TC2->TC_RC = TimerValue;

    /* çàïóñêàåì òàéìåð */
    AT91C_BASE_TC2->TC_CCR = AT91C_TC_CLKEN | AT91C_TC_SWTRG;
}
/*------------------------------------------------------------------------------------------------*/

Генерация сигнала на выходе TIOA2 меандпра с частотой (MCK/2)/TimerValue.
Timofey
Цитата(SpiritDance @ Aug 30 2006, 12:17) *



спасибо!
SpiritDance
По второму пункту, что у вас пишется в MR и в BRGR?
AT91C_US_USMODE_RS485?
Возможно не та частота приема-передачи.
Timofey
Цитата(SpiritDance @ Aug 30 2006, 12:30) *
По второму пункту, что у вас пишется в MR и в BRGR?
AT91C_US_USMODE_RS485?
Возможно не та частота приема-передачи.


У меня должен работать на 5 разных частотах .... Начиная 9600 и кончая 57600. По выбору пользователя. Но сейчас я делаю просто на одной - 14400. хотя бы на ней оживить.
Timofey
С 485 разобрался ... Просто дадли устройство с неправильно припаянными проводами .... Блин! Убил бы! ))) Поэтому инвертированный сигнал получал ))) Ну почти инвертированный )) Вобщем дело оказалось в бабине )
Timofey
Ну помогите пожалуйста разобраться с программным сбросом .... Фигня какая то ....
почемучка
Попробуйте воспользоваться сбросом от WDT.
sapID
Цитата(Timofey @ Aug 31 2006, 11:46) *
Ну помогите пожалуйста разобраться с программным сбросом .... Фигня какая то ....


void Restart(void)
{
// Аппаратный сброс
AT91C_BASE_RSTC->RSTC_RCR |= AT91C_RSTC_PROCRST | AT91C_RSTC_PERRST | AT91C_PASS;

// На всякий случай, программный
__asm("sub r0, r0,r0;");
__asm("bx r0;");
}
Timofey
Цитата(sapID @ Sep 1 2006, 10:32) *
Цитата(Timofey @ Aug 31 2006, 11:46) *

Ну помогите пожалуйста разобраться с программным сбросом .... Фигня какая то ....


void Restart(void)
{
// Аппаратный сброс
AT91C_BASE_RSTC->RSTC_RCR |= AT91C_RSTC_PROCRST | AT91C_RSTC_PERRST | AT91C_PASS;

// На всякий случай, программный
__asm("sub r0, r0,r0;");
__asm("bx r0;");
}


Спасибо большое! Прикольно ... работает smile.gif

З.Ы. А кто тут модератор? Пусть он удалит сообщения мои в разделе FAQ ....
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.