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

 
 
> Миландр 1986ВЕ1Т
Captain
сообщение Mar 23 2017, 09:55
Сообщение #1





Группа: Участник
Сообщений: 7
Регистрация: 23-03-17
Пользователь №: 95 986



Всех приветствую. Работал ли кто с Миландрами? Никак не могу настроить прерывания от таймера (ни одного). Код такой:

CODE
int cnt1, cnt2, cnt3;

/*
* Прерывание таймера 1 (14)
* Смещение в таблице векторов 0x40 + 14 * 4 = 0x78
*/
void Vector78(void) {

cnt1 += 1;

MDR_TIMER1->STATUS = (uint32_t) 0;

}

/*
* Прерывание таймера 2 (15)
* Смещение в таблице векторов 0x40 + 15 * 4 = 0x7C
*/
void Vector7C(void) {

cnt2 += 1;

MDR_TIMER2->STATUS = (uint32_t) 0;

}

/*
* Прерывание таймера 3 (16)
* Смещение в таблице векторов 0x40 + 16 * 4 = 0x80
*/
void Vector80(void) {

cnt3 += 1;

MDR_TIMER3->STATUS = (uint32_t) 0;

}

int main(void) {

int cnt4 = 0;
cnt1 = cnt2 = cnt3 = 0;

... Код включения тактирования ядра и таймеров в другом модуле ...

MDR_TIMER1->CNTRL = (uint32_t) 0;
MDR_TIMER1->CNT = (uint32_t) 0;
MDR_TIMER1->PSG = (uint32_t) 0;
MDR_TIMER1->ARR = (uint32_t) 4095;
MDR_TIMER1->IE = TIMER_IE_CNT_ARR_EVENT_IE | TIMER_IE_CNT_ZERO_EVENT_IE;
MDR_TIMER1->STATUS = (uint32_t) 0;
MDR_TIMER1->CNTRL = (uint32_t) 1;

MDR_TIMER3->CNTRL = (uint32_t) 0;
MDR_TIMER3->CNT = (uint32_t) 0;
MDR_TIMER3->PSG = (uint32_t) 0;
MDR_TIMER3->ARR = (uint32_t) 4095;
MDR_TIMER3->IE = TIMER_IE_CNT_ARR_EVENT_IE | TIMER_IE_CNT_ZERO_EVENT_IE;
MDR_TIMER3->STATUS = (uint32_t) 0;
MDR_TIMER3->CNTRL = (uint32_t) 1;

MDR_TIMER2->CNTRL = (uint32_t) 0;
MDR_TIMER2->CNT = (uint32_t) 0;
MDR_TIMER2->PSG = (uint32_t) 0;
MDR_TIMER2->ARR = (uint32_t) 4095;
MDR_TIMER2->IE = TIMER_IE_CNT_ARR_EVENT_IE | TIMER_IE_CNT_ZERO_EVENT_IE;
MDR_TIMER2->STATUS = (uint32_t) 0;
MDR_TIMER2->CNTRL = (uint32_t) 1;

NVIC_EnableIRQ(TIMER1_IRQn);
NVIC_EnableIRQ(TIMER2_IRQn);
NVIC_EnableIRQ(TIMER3_IRQn);

while (true) {
cnt4 += 1;
}
}


Смотрю по GDB - МК в прерывания не заходит, счетчики cnt1..3 не инкриментируются ни разу.
Что уже проверял:
1. Все таймеры точно затактировались и считают:
Код
(gdb) p *0x40070000 // Регистр TIMER1->CNT
$82 = 3285
$83 = 1406
$84 = 2573
$85 = 1891


2. Вектора в таблице правильные:
Код
(gdb) p Vector78
$86 = {void (void)} 0x300 <Vector78>
(gdb) p *0x00000078
$87 = 769 // 0x300 == (769 & 1)


3. Флаги статуса прерываний подняты:
Код
(gdb) p *0x40070058 // Регистр TIMER1->IE
$88 = 3 // Прерывания по 0 и по ARR разрешены
(gdb) p *0x40070054 // Регистр TIMER1->STATUS
$89 = 3 // Оба события


4. В NVIC прерывания разрешены:
Код
(gdb) p *0xE000E100
$90 = 114688 // Биты 14,15,16


5. Всяко пробовал таскать строку включения прерывания таймера (до включения счетчика и после). Безрезультатно.

6. Что я упускаю?

Сообщение отредактировал IgorKossak - Mar 23 2017, 15:45
Причина редактирования: [codebox] для длинного кода. [code]-для короткого!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Captain
сообщение Apr 6 2017, 09:42
Сообщение #2





Группа: Участник
Сообщений: 7
Регистрация: 23-03-17
Пользователь №: 95 986



Вот дошли руки до ДМА и что-то второй день ни в какую не могу заставить это работать. Кое-как из того, что написано в документации (а написано, надо сказать коряво) родил такой код:
CODE
static dmaCtrlData_t dmaCtrlData[16]
__attribute__((aligned(512), section("ahb_lite")));
volatile char tmp1[] = "DMA test string.";
volatile char tmp2[20];

int main(void) {

... инициализация клоков ...

memset(dmaCtrlData, 0x0, sizeof(dmaCtrlData));

// Reset to the initial state.
MDR_DMA->CTRL_BASE_PTR = (uint32_t) dmaCtrlData;
MDR_DMA->CFG = 1U;
MDR_DMA->CHNL_SW_REQUEST = 0U;
MDR_DMA->CHNL_PRI_ALT_CLR = 0xFFFFFFFF;
MDR_DMA->CHNL_PRIORITY_CLR = 0xFFFFFFFF;
MDR_DMA->CHNL_REQ_MASK_SET = 0xFFFFFFFF;
MDR_DMA->CHNL_USEBURST_CLR = 0xFFFFFFFF;
MDR_DMA->CHNL_ENABLE_CLR = 0xFFFFFFFF;
MDR_DMA->ERR_CLR = 1U;

// Configure DMA_CH0
dmaCtrlData[0].dmaSrcEndAddr = (uint32_t) tmp1 + sizeof(tmp1) - 1;
dmaCtrlData[0].dmaDstEndAddr = (uint32_t) tmp2 + sizeof(tmp1) - 1;
dmaCtrlData[0].dmaControl = (0x00 << 30) | // One byte destination increment;
(0x00 << 28) | // Destination transfer unit size;
(0x00 << 26) | // One byte source increment;
(0x00 << 24) | // Source transfer unit size;
(0U << 21) | // dst_prot_ctrl (whatever this is - let it be 0);
(0U << 18) | // src_prot_ctrl;
(15U << 14) | // Acquire the bus and do not release until the transfer complete;
((sizeof(tmp1) - 1) << 4) |
// Transfers count - 1.
(0U << 3) | // next_useburst ??
(1U << 0); // Simple request mode. Auto-request mode does not work either.
MDR_DMA->CHNL_REQ_MASK_CLR = 1U;
MDR_DMA->CHNL_ENABLE_SET = 1U;
MDR_DMA->CHNL_SW_REQUEST = 1U;

... зацикливаемся ...
}

Здесь пытаюсь скопировать строку из tmp1 в tmp2. Собственно для проверки, что все заполнилось правильно:
1. Значения регистров MDR_DMA и dmaCtrlData для 1 канала ДО запуска передачи (MDR_DMA->CHNL_SW_REQUEST = 1U):
CODE
{ STATUS = 0x101f0001,
CFG = 0x0,
CTRL_BASE_PTR = 0x20100000,
ALT_CTRL_BASE_PTR = 0x20100200,
WAITONREQ_STATUS = 0x7fffffff,
CHNL_SW_REQUEST = 0x0,
CHNL_USEBURST_SET = 0x0,
CHNL_USEBURST_CLR = 0x0,
CHNL_REQ_MASK_SET = 0xfffffffe,
CHNL_REQ_MASK_CLR = 0xfffffffe,
CHNL_ENABLE_SET = 0x1,
CHNL_ENABLE_CLR = 0x1,
CHNL_PRI_ALT_SET = 0x0,
CHNL_PRI_ALT_CLR = 0x0,
CHNL_PRIORITY_SET = 0x0,
CHNL_PRIORITY_CLR = 0x0,
RESERVED0 = {0x0, 0x0, 0x0},
ERR_CLR = 0x0 }

{ dmaSrcEndAddr = 0x20000614,
dmaDstEndAddr = 0x20005588,
dmaControl = 0x3c101,
dmaUnused = 0x0 }

2. И ПОСЛЕ:
CODE
{ STATUS = 0x101f0001,
CFG = 0x0,
CTRL_BASE_PTR = 0x20100000,
ALT_CTRL_BASE_PTR = 0x20100200,
WAITONREQ_STATUS = 0x7fffffff,
CHNL_SW_REQUEST = 0x0,
CHNL_USEBURST_SET = 0x0,
CHNL_USEBURST_CLR = 0x0,
CHNL_REQ_MASK_SET = 0xfffffffe,
CHNL_REQ_MASK_CLR = 0xfffffffe,
CHNL_ENABLE_SET = 0x0,
CHNL_ENABLE_CLR = 0x0,
CHNL_PRI_ALT_SET = 0x0,
CHNL_PRI_ALT_CLR = 0x0,
CHNL_PRIORITY_SET = 0x0,
CHNL_PRIORITY_CLR = 0x0,
RESERVED0 = {0x0, 0x0, 0x0},
ERR_CLR = 0x0 }

{ dmaSrcEndAddr = 0x20000614,
dmaDstEndAddr = 0x20005588,
dmaControl = 0x3c000,
dmaUnused = 0x0 }

И казалось бы ДМА отработал (dmaControl перешел в режим "Стоп" и счетчик обнулился, а также сбросился Enable на первом канале)... но фиг там, содержимое tmp2 - как были нули так и остались. Для проверки - адреса:
Код
(volatile char (*)[17]) 0x20000604 <tmp1>
(volatile char (*)[20]) 0x20005578 <tmp2>
(dmaCtrlData_t (*)[16]) 0x20100000 <dmaCtrlData>

Что я забыл/не учел?

bb-offtopic.gif Из так называемого даташита - не смог понять что за передачи с кэшированием/буферизацией и как это использовать. Аналогично - не понятно в чем разница между режимами "Основной" и "Авто-запрос".

Сообщение отредактировал IgorKossak - Apr 6 2017, 17:58
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
Go to the top of the page
 
+Quote Post
HardEgor
сообщение Apr 6 2017, 09:56
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



Там на форуме есть ссылки на SPL с готовыми примерами.
Потом появился pack для Keil - Milandr.MDR1986BExx.1.4.2.pack, там тоже примеры есть.
Еще на форуме выкладывали, как я понял, тестовые программы без SPL, называются так Examples_for_1986VE1_31_01_2012.rar или так 1986VE1T_demoprogramms___part1.rar

Правда у меня DMA в режиме ping-pong так и не заработал и я плюнул на него.
Если что, могу ссылочкой на свой архив с упомянутыми файлами поделиться.
Go to the top of the page
 
+Quote Post
Captain
сообщение Apr 6 2017, 10:50
Сообщение #4





Группа: Участник
Сообщений: 7
Регистрация: 23-03-17
Пользователь №: 95 986



Цитата(HardEgor @ Apr 6 2017, 12:56) *
Там на форуме есть ссылки на SPL с готовыми примерами.
Потом появился pack для Keil - Milandr.MDR1986BExx.1.4.2.pack, там тоже примеры есть.
Еще на форуме выкладывали, как я понял, тестовые программы без SPL, называются так Examples_for_1986VE1_31_01_2012.rar или так 1986VE1T_demoprogramms___part1.rar

Правда у меня DMA в режиме ping-pong так и не заработал и я плюнул на него.
Если что, могу ссылочкой на свой архив с упомянутыми файлами поделиться.

Да, нашел эти примеры. Там ДМА работает с УАРТом, но не суть. Проблема в том, что написано РОВНО то же самое, что и у меня... прямо строка в строку. Я сейчас даже порядок инициализации такой же как там сделал.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Captain   Миландр 1986ВЕ1Т   Mar 23 2017, 09:55
- - adnega   Цитата(Captain @ Mar 23 2017, 12:55) Кодi...   Mar 23 2017, 10:08
- - HardEgor   Цитата(Captain @ Mar 23 2017, 16:55) Смот...   Mar 23 2017, 10:17
- - Captain   Спасибо за ответы. Могу, конечно ошибаться, но vol...   Mar 23 2017, 10:26
|- - novikovfb   Цитата(Captain @ Mar 23 2017, 14:26) Спас...   Mar 23 2017, 10:42
- - AVR   Рад что вопрос темы успешно решен. Я работаю сейча...   Mar 23 2017, 12:34
|- - Captain   Цитата(AVR @ Mar 23 2017, 15:34) Рад что ...   Mar 24 2017, 07:39
||- - AVR   Цитата(Captain @ Mar 24 2017, 10:39) до s...   Mar 25 2017, 15:33
||- - adnega   Цитата(AVR @ Mar 25 2017, 18:33) Устройст...   Mar 25 2017, 16:23
|||- - AVR   Цитата(adnega @ Mar 25 2017, 19:23) О как...   Mar 25 2017, 16:26
|||- - adnega   Цитата(AVR @ Mar 25 2017, 19:26) один бит...   Mar 25 2017, 16:57
|||- - AVR   Цитата(adnega @ Mar 25 2017, 19:57) Код м...   Mar 25 2017, 17:24
||- - jcxz   Цитата(AVR @ Mar 25 2017, 17:33) Не, там ...   Mar 26 2017, 09:34
||- - AVR   Цитата(jcxz @ Mar 26 2017, 12:34) Если мо...   Mar 26 2017, 09:39
|||- - jcxz   Цитата(AVR @ Mar 26 2017, 11:39) Спасибо ...   Mar 26 2017, 09:57
||- - adnega   Цитата(jcxz @ Mar 26 2017, 12:34) Пауза м...   Mar 26 2017, 21:09
||- - jcxz   Цитата(adnega @ Mar 26 2017, 23:09) Это к...   Mar 26 2017, 21:27
|||- - adnega   Цитата(jcxz @ Mar 27 2017, 00:27) Не знаю...   Mar 27 2017, 07:43
|||- - jcxz   Ещё раз повторю - дело не в фифо (естественно он п...   Mar 27 2017, 07:56
||- - AVR   Цитата(adnega @ Mar 27 2017, 00:09) В Док...   Mar 27 2017, 13:12
||- - jcxz   Цитата(AVR @ Mar 27 2017, 15:12) Я понима...   Mar 27 2017, 19:48
||- - KRS   Цитата(AVR @ Mar 27 2017, 16:12) Я понима...   Mar 28 2017, 04:09
||- - jcxz   Цитата(KRS @ Mar 28 2017, 06:09) Вот у At...   Mar 28 2017, 06:25
|- - KRS   Цитата(AVR @ Mar 23 2017, 15:34) Миландро...   Mar 24 2017, 12:27
- - KRS   пауза из-за CS посмотрите на картинку SPI там видн...   Mar 27 2017, 12:52
|- - jcxz   Цитата(KRS @ Mar 27 2017, 14:52) пауза из...   Mar 27 2017, 13:09
- - HardEgor   Цитата(Captain @ Apr 6 2017, 17:50) Да, н...   Apr 6 2017, 11:25
- - Captain   Цитата(HardEgor @ Apr 6 2017, 14:25) Такж...   Apr 6 2017, 11:55
- - AVR   Цитата(HardEgor @ Apr 6 2017, 14:25) Там ...   Apr 6 2017, 16:57


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

 


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


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