разобраться с NVICом.
Собрал в кубе проект для аналогичной stm-ки. Прерывания перестают выполнятся, если поставить PreemptPriority > 3.
NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4); /*!< 4 bits for pre-emption priority, 0 bit for subpriority */
NVIC_SetPriority(USART6_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),X, 0)); // X от 0 до 3 работает, больше 3 не работает
Пытаюсь запустить FreeRTOS, в xPortStartScheduler() не правильно читается/пишется регистр IPR0 (Interrupt Priority Register)
// pucFirstUserPriorityRegister - address IPR0
/* Determine the number of priority bits available. First write to all possible bits. */
*pucFirstUserPriorityRegister = portMAX_8_BIT_VALUE; // portMAX_8_BIT_VALUE = 0xff
/* Read the value back to see how many bits stuck. */
ucMaxPriorityValue = *pucFirstUserPriorityRegister; // читается 0xe0, должно 0xf0
Блин, а можно код оформлять через '''
Значек `
Попробуйте закоментировать определение max priority, вставьте только ucMaxPriorityValue = 0xf0; Из опыта, китайцы очень не любят запись в reserved биты и могут чудесатить.
если записать 0xf0, то всё равно читается 0xe0
Обсуждают сегодня