реклама на сайте
подробности

 
 
> Сброс контроллера и ШИМ
Timofey
сообщение Aug 30 2006, 04:27
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



Здраствуйте.

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

Сообщение отредактировал Timofey - Aug 30 2006, 04:29
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SpiritDance
сообщение Aug 30 2006, 06:17
Сообщение #2


Дух погибшего транзистора
****

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



Цитата(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.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 01:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01367 секунд с 7
ELECTRONIX ©2004-2016