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

 
 
> Keil Arm. Нарушена последовательность выполнения+++, Помогите новичку. Зешел в тупик - не работает UART
Димон Безпарольн...
сообщение Mar 5 2011, 09:10
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Есть нехитрый код

Цитата
int main (void) {
int i;
float F1, F2, F3;
1 *RSTC_MR = 0xA5000000;
2 *WDT_MR = 0x3FFF2FFF;
3 *CKGR_MOR = 0x0000ff01;
4 *MC_FMR = 0x00320100;
5 *PMC_MCKR = 0x13;
6 *CKGR_PLLR = 0x00ff3fff;
7 *PMC_PCER = 0x22
8 *PIO_PDR = 0x4
9 *US_CR = 0x8f9
10 *US_MR = 0xf152
11 *US_BRGR = 0x4;
12 *US_CR = 0xfae5


и так далее

В окне дизасемблирования по шагам (включен Assebly Mode)
Строки 1 и 2 выполняются последовательно. Но

Инструкция *WDT_MR = 0x3FFF2FFF; состоит из одной загрузки: LDR R0,[PC,#0x00D8] Т.е. сохранения STR нет.

Дальше выполняется почему - то строка 10, потом 3, потом программа прыгает вообще в цикл и сбрасывает WDT, потом 4, потом снова в цикл и выполняет *PIO_CODR = led_mask[i];, потом строки 5, 6, 7.

Команда
Цитата
*US_CR = (0x1 << 2) | //Reset Receiver
(0x1 << 3) | //Reset Transmitter
(0x1 << 5) | //Receiver Disable
(0x1 << 7); //Transmitter Disable


Интерпретируется как SUB R0,R3,R0,ASR #12

Где я напортачил? Черт, второй день бьюсь - почему не работает UART0 - а тут вообще странно что что - то работает.

Помогите! Закипел!

Сообщение отредактировал Димон Безпарольный - Mar 5 2011, 09:12
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dron_Gus
сообщение Mar 5 2011, 13:12
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



А регистры у Вас как определены? Явно без volatile.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
Димон Безпарольн...
сообщение Mar 5 2011, 14:34
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Цитата(Dron_Gus @ Mar 5 2011, 16:12) *
А регистры у Вас как определены? Явно без volatile.

Точно. Регистры у меня поределены так:
Цитата
#define PIO_PER1 ((unsigned int *) 0xFFFFF400) //Запрещение периферии, разрешение PIO
#define PIO_PDR1 ((unsigned int *) 0xFFFFF404) //Запрещение PIO, разрешение периферии
#define PIO_PSR1 ((unsigned int *) 0xFFFFF408) //Запрещение PIO, разрешение периферии

#define PIO_OER1 ((unsigned int *) 0xFFFFF410) //Разрешение PIO управлять выходом
#define PIO_ODR1 ((unsigned int *) 0xFFFFF414) //
#define PIO_OSR1 ((unsigned int *) 0xFFFFF418) //

#define PIO_SODR1 ((unsigned int *) 0xFFFFF430) //Установка в 1 выводов PIO
#define PIO_CODR1 ((unsigned int *) 0xFFFFF434) //Сброс в 0 выводов PIO
#define PIO_ODSR1 ((unsigned int *) 0xFFFFF438) //
#define PIO_PDSR1 ((unsigned int *) 0xFFFFF43C) //

#define PIO_MDER1 ((unsigned int *) 0xFFFFF450) //
#define PIO_MDDR1 ((unsigned int *) 0xFFFFF454) //
#define PIO_MDSR1 ((unsigned int *) 0xFFFFF458) //

#define PIO_PUDR1 ((unsigned int *) 0xFFFFF460) //Включение подтягивающих резисторов
#define PIO_PUER1 ((unsigned int *) 0xFFFFF464) //
#define PIO_PUSR1 ((unsigned int *) 0xFFFFF468) //

#define PIO_ASR1 ((unsigned int *) 0xFFFFF470) //
#define PIO_BSR1 ((unsigned int *) 0xFFFFF474) //Выбор периферии В
#define PIO_ABSR1 ((unsigned int *) 0xFFFFF478) //

#define PMC_SCER1 ((unsigned int *) 0xFFFFFC00) //Разрешение тактирования процессора и выводов PCKx
#define PMC_SCDR1 ((unsigned int *) 0xFFFFFC04) //
#define PMC_SCSR1 ((unsigned int *) 0xFFFFFC08) //

#define PMC_PCER1 ((unsigned int *) 0xFFFFFC10) //Регистр тактирования периферии
#define PMC_PCDR1 ((unsigned int *) 0xFFFFFC14) //
#define PMC_PCSR1 ((unsigned int *) 0xFFFFFC18) //

#define CKGR_MOR1 ((unsigned int *) 0xFFFFFC20) //Main Oscillator Register
#define CKGR_MCFR1 ((unsigned int *) 0xFFFFFC24) //

#define CKGR_PLLR1 ((unsigned int *) 0xFFFFFC2C) //Регистр режима PLL
#define PMC_MCKR1 ((unsigned int *) 0xFFFFFC30) //Регистр выбора источника тактовых импульсов процессора и делитель

#define PMC_PCK01 ((unsigned int *) 0xFFFFFC40) //Регистр режима выходов PCK0
#define PMC_PCK11 ((unsigned int *) 0xFFFFFC44) //Регистр режима выходов PCK1

#define RSTC_MR1 ((unsigned int *) 0xFFFFFD08) //Регистр режима сброса

#define WDT_CR1 ((unsigned int *) 0xFFFFFD40) //Регистр сброса Watchdog Timer
#define WDT_MR1 ((unsigned int *) 0xFFFFFD44) //Регистр режима Watchdog Timer
#define WDT_SR1 ((unsigned int *) 0xFFFFFD48) //Регистр статуса Watchdog Timer

#define MC_FMR1 ((unsigned int *) 0xFFFFFF60) //Регистр режима флэш контроллера

#define US_CR1 ((unsigned int *) 0xFFFC0000) // (US_CR) Control Register
#define US_MR1 ((unsigned int *) 0xFFFC0004) // (US_MR) Mode Register
#define US_IER1 ((unsigned int *) 0xFFFC0008) // (US_IER) Interrupt Enable Register
#define US_IDR1 ((unsigned int *) 0xFFFC000C) // (US_IDR) Interrupt Disable Register
#define US_IMR1 ((unsigned int *) 0xFFFC0010) // (US_IMR) Interrupt Mask Register
#define US_CSR1 ((unsigned int *) 0xFFFC0014) // (US_CSR) Channel Status Register
#define US_RHR1 ((unsigned int *) 0xFFFC0018) // (US_RHR) Receiver Holding Register
#define US_THR1 ((unsigned int *) 0xFFFC001C) // (US_THR) Transmitter Holding Register
#define US_BRGR1 ((unsigned int *) 0xFFFC0020) // (US_BRGR)Baud Rate Generator Register
#define US_RTOR1 ((unsigned int *) 0xFFFC0024) // (US_RTOR)Receiver Time-out Register
#define US_TTGR1 ((unsigned int *) 0xFFFC0028) // (US_TTGR)Transmitter Time-guard Register
#define US_FIDI1 ((unsigned int *) 0xFFFC0040) // (US_FIDI)FI_DI_Ratio Register
#define US_NER1 ((unsigned int *) 0xFFFC0044) // (US_NER) Nb Errors Register
#define US_IF1 ((unsigned int *) 0xFFFC004C) // (US_IF) IRDA_FILTER Register


Единица на конце - чтобы имена не пересекались.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 14:25
Рейтинг@Mail.ru


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