Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Караул! Крыша едет. Keil Arm. Нарушена последовательность выполнения+++
Отправлено
dshabrov (84.21.231.242) 05 марта 2011, г. 11:38
Есть нехитрый код
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 - а тут вообще странно что что - то работает.
Помогите! Закипел!
Составить ответ | Вернуться на конференцию
Ответы