STM32F103, непонятки с DMA
15.11.2014, 13:49
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
|
Re: STM32F103, непонятки с DMA
Сообщение от niXto
|
|
Что за дебри?
|
Дебри gdbg
P.S. Мастдайку и прочую пиратчину не предлагать!
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
Последний раз редактировалось eddy; 15.11.2014 в 13:55.
|
|
|
|
15.11.2014, 13:57
|
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: STM32F103, непонятки с DMA
Да не слушай ты никого! Отлаживать периферию пошагово полный бред! За это время уже смастерил бы или купил анализатор, толку больше бы было.
|
|
|
|
15.11.2014, 14:50
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: STM32F103, непонятки с DMA
Сообщение от eddy
|
|
P.S. Мастдайку и прочую пиратчину не предлагать!
|
Гордый какой!
P.S.
Нашёл проблему на ровном месте...
Поставь лицензионную.
|
|
|
|
15.11.2014, 15:08
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
|
Re: STM32F103, непонятки с DMA
Сообщение от STM32F0
|
|
За это время уже смастерил бы или купил анализатор, толку больше бы было.
|
Осциллограф есть!
А для дома купил китайский клон saleae, жду.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
15.11.2014, 15:54
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: STM32F103, непонятки с DMA
Сообщение от eddy
|
|
А для дома купил китайский клон saleae, жду.
|
Этот пока не спасёт?
|
|
|
|
15.11.2014, 15:54
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
|
Re: STM32F103, непонятки с DMA
Сообщение от eddy
|
|
А для дома купил китайский клон saleae, жду.
|
То есть пиратчину всё-таки приветствуете
И только некоторые обстоятельства не позволяют пользоваться для работы нормальной ОСью, где всё просто, удобно и интуитивно понятно...
|
|
|
|
15.11.2014, 16:22
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
|
Re: STM32F103, непонятки с DMA
Сообщение от niXto
|
|
И только некоторые обстоятельства не позволяют пользоваться для работы нормальной ОСью, где всё просто, удобно и интуитивно понятно...
|
Ну вот не надо чушь про мастдайку нести, ладно? Это убожество вообще операционной системой недостойно называться! Только как пускалка игрулек и годится. Говно, одним словом.
Ну, а по делу: почитал я даташит. Понял, как установить нужный уровень сигнала: т.к. у меня polarity = "active low", то достаточно сделать при инициализации (а также в прерыванях по окончанию передачи) TIM2_CCR4 = 0. Однако, оказывается, чтобы занести значение в TIM2_CCR4, нужно сгенерировать update event (то-то у меня и был первый импульс каким-то идиотским). И если первый update event, а также он самый из прерывания, нормально срабатывают, и рабочий уровень сигнала держится на 1, то внутри функции сброса шины 1-wire почему-то генерируется прерывание, хоть UEV и не должен его генерировать (да и я явно запрещаю прерывания до настройки).
Буду дальше ковырять даташит.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
15.11.2014, 17:31
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
|
Re: STM32F103, непонятки с DMA
Итак, чушь у меня получалась потому, что как только я запускал таймер, генерировалось событие обновления, которое вызывало срабатывание прерывания и получалось, что я сразу же отрубал таймер. Сделал вот так:
|
Код:
|
void ow_reset(){
ow_done = 0;
rstat = 0;
TIM2_SR = 0; // clear all flags
TIM2_DIER = 0; // disable timer interrupts
TIM2_ARR = OW_RESET_TIME; // set period to 1ms
TIM2_CCR4 = OW_RESET; // zero pulse length
TIM2_EGR = TIM_EGR_UG; // update values of ARR & CCR4
TIM2_CR1 |= TIM_CR1_OPM | TIM_CR1_CEN; // we need only single pulse & run timer
TIM2_SR = 0; // clear update flag generated after timer's running
TIM2_DIER = TIM_DIER_UIE | TIM_DIER_CC3IE; // generate interrupts on update event & cc
nvic_enable_irq(NVIC_TIM2_IRQ);
} |
т.е. сбросил все флаги перед тем, как разрешить прерывания. В итоге прерывание на UEV возникает как раз когда надо — после одного отрабатывания. Ну, а в прерывании уже вырубаю все, устанавливаю правильный уровень сигнала и сохраняю значение CCR3:
|
Код:
|
void tim2_isr(){
if(TIM2_SR & TIM_SR_UIF){ // update interrupt
TIM2_SR &= ~TIM_SR_UIF; // clear flag
TIM2_DIER = 0; // disable all timer interrupts
TIM2_CCR4 = 0; // set output value to 1
TIM2_EGR |= TIM_EGR_UG; // generate update event to change value in CCR4
TIM2_CR1 &= ~TIM_CR1_CEN; // timer_disable_counter(TIM2);
nvic_disable_irq(NVIC_TIM2_IRQ);
ow_done = 1;
}
if(TIM2_SR & TIM_SR_CC3IF){ // we need this interrupt to store CCR3 value
TIM2_SR = 0; // clear flag (we've manage TIM_SR_UIF before, so can simply do =0)
rstat = TIM2_CCR3;
}
} |
Вот, правда, иной раз возникают импульсы длиной 1мкс после отработки.
Не могу найти в даташите, как заставить в режиме one-pulse не изменять значение выхода после завершения работы таймера.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
15.11.2014, 17:46
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
|
Re: STM32F103, непонятки с DMA
Все. Теперь остается причесать функции по генерированию ШИМа при помощи DMA, да допилить протокол.
Воистину, библиотеки - зло! Выпиливание функций opencm и замена пяти-семи функций на одно выражение вида регистр=значение неплохо так код подсократило: уже полтора килобайта ушло!
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
Последний раз редактировалось eddy; 15.11.2014 в 18:44.
|
|
|
|
16.11.2014, 13:56
|
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: STM32F103, непонятки с DMA
Это херня! Абстрагируйся от прежнего АВР/ПИК хлама.
Вот так должен выглядеть майн:
|
Код:
|
GPIO_Init();
TIM2_Init();
__enable_interrupt();
TIM2-›CR1 |= TIM2_CR1_CEN;
while(1); |
Это от СТМ8, но суть та же.
И одно прерывание, для контроля состояния линии. Всё, больше никакие функции для работы с 1-wire там не нужны! Дальше как обычно, вытаскиваем из байтов температуру, считаем КС и т.д..
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:46.
|
|