Чт окт 25, 2018 11:30:20
#define DWT_CYCCNT *(volatile unsigned long *)0xE0001004
#define DWT_CONTROL *(volatile unsigned long *)0xE0001000
#define SCB_DEMCR *(volatile unsigned long *)0xE000EDFC
void DWT_Init(void){
//разрешаем использовать счётчик
SCB_DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
//обнуляем значение счётного регистра
DWT_CYCCNT = 0;
//запускаем счётчик
DWT_CONTROL |= DWT_CTRL_CYCCNTENA_Msk;
}
static __inline uint32_t delta(uint32_t t0, uint32_t t1){
return (t1 - t0);
}
void delay_us(uint32_t us){
uint32_t t0 = DWT->CYCCNT;
uint32_t us_count_tic = us * (SystemCoreClock/1000000);
while (delta(t0, DWT->CYCCNT) < us_count_tic) ;
}
void delay_ms(uint32_t us){
uint32_t t0 = DWT->CYCCNT;
uint32_t us_count_tic = us * (SystemCoreClock/1000);
while (delta(t0, DWT->CYCCNT) < us_count_tic) ;
}
void Timer3Init(){
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
TIM3->PSC = 120-1;
TIM3->ARR = 500-1;
TIM3->DIER |= TIM_DIER_UIE;
TIM3->EGR |= TIM_EGR_UG;
TIM3->SR &= ~(TIM_SR_UIF);
TIM3->CR1 |= TIM_CR1_CEN;
NVIC_EnableIRQ(TIM3_IRQn);
}
Чт окт 25, 2018 11:53:16
Чт окт 25, 2018 12:15:01
Не кейл, но может поймете как нужно настроить отладку. http://purebasic.mybb.ru/viewtopic.php?id=564#p7600Alex-Elektron писал(а):Можно как-то через кейловский дебаг узнать, а каком прерывании завис МК?
Чт окт 25, 2018 13:02:36
Чт окт 25, 2018 13:16:00
void DMA1_Channel5_IRQHandler() {
if (DMA1->ISR & DMA_ISR_TCIF5 ) {
while(!(SPI2->SR & SPI_SR_RXNE));
while (SPI2->SR & SPI_SR_BSY);
(void) SPI2->DR;
// while(!(SPI2->SR & SPI_SR_TXE));
GlobalVar_SPI_Transmitted = 1;
DMA1_Channel5->CCR &= ~DMA_CCR5_EN;
SPI2->CR2 &= ~ SPI_CR2_TXDMAEN;
DMA1->IFCR |= DMA_IFCR_CTCIF5;
}
}
Пт окт 26, 2018 18:47:51