Никак не осилю SysTick. Написал SysTick_Config по подобию CМ3, прерывания срабатывают, на осциллографе меандр, только он не меняется в зависимости от записываемого в CMP значения.
Тактовая 72 МГц, тактирование SysTick от HCLK. В итоге хочу получить прерывание каждую 1 мс.
Чего не хватает?.......... Теперь все хватает, исправил.
RV_STATIC_INLINE uint32_t SysTick_Config(uint64_t ticks)
{
SysTick->CMP = (uint64_t)(ticks - 1UL);
SysTick->CNT = 0UL;
SysTick->CTLR = SysTick_CTRL_INITVALUE_Msk | /* on update init value */
SysTick_CTRL_COUNTMODE_Msk | /* count DOWN */
SysTick_CTRL_AUTORELEN_Msk | /* on autoreload */
SysTick_CTRL_CLKSOURCE_Msk | /* HCLK base time */
SysTick_CTRL_IE_ENABLE_Msk | /* Interrupt Enable */
SysTick_CTRL_ENABLE_Msk; /* SysTick Enable */
//SysTick->CTLR = 0x1F
NVIC_SetPriority(SysTicK_IRQn, 0); /* set Priority for Systick Interrupt */
NVIC_EnableIRQ(SysTicK_IRQn);
return (0UL);
}
........
void SysTick_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
void SysTick_Handler(){
SysTick->SR = 0;
GPIOB->OUTDR = ~GPIOB->OUTDR;
}
.......................
SysTick_Config(72000); // 1ms