ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
5 мая
1294438 Топик полностью
petrd (22.03.2023 16:48 - 24.03.2023 12:26, просмотров: 529) ответил petrd на Risc-V, CH32V203RBT6, MounRiver Studio IDE, Си. Отладчик WCH-Link.
Никак не осилю 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