Ср май 25, 2022 14:07:34
Ср май 25, 2022 14:21:57
void USART1_IRQHandler(void) {
if (SymbolCount == 0) {
TIM4->CNT = 0;
TIM4->CR1 |= TIM_CR1_CEN;
}
ReceivedText[SymbolCount++] = USART1->DR;
}
void TIM4_IRQHandler(void) {
TIM4->SR &=~ TIM_SR_UIF;
TIM4->CR1 &=~ TIM_CR1_CEN;
USART_SendStr("Time out!");
SymbolCount = 0;
}
Ср май 25, 2022 15:39:28
Ср май 25, 2022 16:03:02
void USART1_IRQHandler(void) {
uint32_t i = 0;
USART1->SR &=~ USART_SR_RXNE; // Clear USART1 RXNE Interrupt flag
GPIOC->ODR |= GPIO_ODR_ODR12; // Enable LED
for (i = 0; i < 65535; i++); // Delay
GPIOC->ODR &=~ GPIO_ODR_ODR12; // Disable LED
for (i = 0; i < 65535; i++); // Delay
}
Ср май 25, 2022 16:18:11
Ср май 25, 2022 16:21:48
Ср май 25, 2022 21:35:39
void PendSV_Handler(void) {
profiler();
}
void profiler(void) {
...
SCB->ICSR |= SCB_ICSR_PENDSVSET_Msk; // перезапуск, чтобы начать двигаться сразу
...
}
// IRQ priorities:
#define SysTick_IRQ_Priority 2
#define I2C_IRQ_PRI 2
#define TIMER0_IRQ_PRI 3
#define TIMER1_IRQ_PRI 3
#define USART0_IRQ_PRI 4
#define USART3_TX_IRQ_PRI 4
#define LDMA_IRQ_PRI 5
#define ADC0_IRQ_Priority 5
#define LETIMER0_IRQ_Priority 5
#define PendSV_IRQ_priority 7
section size addr
.text 72968 0
.ARM.exidx 8 72968
.stack 8192 536870912
.data 1856 536879104
.bss 173420 536880960
.heap 13136 537054384
Чт май 26, 2022 05:26:20
Я увеличил размер стека с 4096 до 8192 байт
Может ли быть так, что оно вызовется снова не завершив текущее. А как он знает, что текущее завершилось?
Чт май 26, 2022 07:19:36
Чт май 26, 2022 08:42:22
void USART1_IRQHandler(void) {
uint32_t i = 0;
NVIC->ICER[1] |= 0x20 ; // Disable USART1 interrupt.
USART1->SR = 0 ;
GPIOC->ODR |= GPIO_ODR_ODR12 ; // Enable LED.
for (i = 0; i < 65535; i++) ; // Delay
GPIOC->ODR &=~ GPIO_ODR_ODR12 ; // Disable LED.
for (i = 0; i < 65535; i++) ; // Delay
NVIC->ISER[1] |= 0x20 ; // Enable USART1 interrupt.
}
void USART1_IRQHandler(void) {
if ((((USART1->SR & USART_SR_RXNE) >> USART_SR_RXNE_Pos) == 1) & (((USART1->SR & USART_SR_ORE) >> USART_SR_ORE_Pos) != 1)) {
ReceivedText[SymbolCount++] = USART1->DR;
} else {
(void)USART1->DR;
(void)USART1->SR;
}
Чт май 26, 2022 09:29:23
Чт май 26, 2022 09:33:45
Чт май 26, 2022 10:34:17
void USART1_IRQHandler(void) {
uint8_t i = 0;
if ((((USART1->SR & USART_SR_RXNE) >> USART_SR_RXNE_Pos) == 1) & (((USART1->SR & USART_SR_ORE) >> USART_SR_ORE_Pos) != 1) & (((USART1->SR & USART_SR_IDLE) >> USART_SR_IDLE_Pos) != 1)) {
ReceivedText[SymbolCount++] = USART1->DR;
(void)USART1->SR;
} else {
if (((USART1->SR & USART_SR_ORE) >> USART_SR_ORE_Pos) == 1) {
USART_SendStr("Overrun!");
(void)USART1->DR;
(void)USART1->SR;
memset(ReceivedText, 0, sizeof ReceivedText);
SymbolCount = 0;
}
if (((USART1->SR & USART_SR_IDLE) >> USART_SR_IDLE_Pos) == 1) {
if (SymbolCount != 10) {
USART_SendStr("Time out!");
memset(ReceivedText, 0, sizeof ReceivedText);
SymbolCount = 0;
(void)USART1->DR;
(void)USART1->SR;
} else {
SymbolCount = 0;
for (i = 0; i < 11; i++) {
ReceivedCommand[i] = ReceivedText[i];
}
ReceivedCommand[11] = 0;
(void)USART1->DR;
(void)USART1->SR;
}
}
}
}
Чт май 26, 2022 10:50:51
Чт май 26, 2022 13:01:42
if ((((USART1->SR & USART_SR_RXNE) >> USART_SR_RXNE_Pos) == 1) & (((USART1->SR & USART_SR_ORE) >> USART_SR_ORE_Pos) != 1) & (((USART1->SR & USART_SR_IDLE) >> USART_SR_IDLE_Pos) != 1))
Чт май 26, 2022 13:14:19
Но, как ни странно, работать будет. Потому что остальные условия тоже по-дурацки написаны и выставляют только младший бит.Код получился %цензор%. Ну что это? Что ещё ща "&"?
(USART1->SR & USART_SR_RXNE)
Где ж вы раньше были? Сейчас-то, когда ТС сам нашел упоминание этого бита (который он вообще не трогал!), легко тыкать в документацию.Даташиты то когда будем читать?
Чт май 26, 2022 13:28:51
if (((USART1->SR & USART_SR_ORE) >> USART_SR_ORE_Pos) == 1)
if (USART1->SR & USART_SR_ORE)
void foo1()
{
if (((USART1->ISR & USART_ISR_ORE) >> USART_ISR_ORE_Pos) == 1)
__NOP();
}
void foo2()
{
if (USART1->ISR & USART_ISR_ORE)
__NOP();
}
_Z4foo1v:
LDR.N R0,??DataTable2_2
LDR R1,[R0, #+0]
UBFX R0,R1,#+3,#+1
CBZ.N R0,??foo1_0
Nop
??foo1_0:
BX LR
_Z4foo2v:
LDR.N R0,??DataTable2_2
LDR R1,[R0, #+0]
LSLS R2,R1,#+28
IT MI
NopMI
BX LR
Где ж вы раньше были? Сейчас-то, когда ТС сам нашел упоминание этого бита (который он вообще не трогал!), легко тыкать в документацию.Даташиты то когда будем читать?
Чт май 26, 2022 16:56:20
if (((USART1->SR & USART_SR_ORE) >> USART_SR_ORE_Pos) == 1)
if (USART1->SR & USART_SR_ORE)
void foo1()
{
if (((USART1->ISR & USART_ISR_ORE) >> USART_ISR_ORE_Pos) == 1)
__NOP();
}
void foo2()
{
if (USART1->ISR & USART_ISR_ORE)
__NOP();
}
_Z4foo1v:
LDR.N R0,??DataTable2_2
LDR R1,[R0, #+0]
UBFX R0,R1,#+3,#+1
CBZ.N R0,??foo1_0
Nop
??foo1_0:
BX LR
_Z4foo2v:
LDR.N R0,??DataTable2_2
LDR R1,[R0, #+0]
LSLS R2,R1,#+28
IT MI
NopMI
BX LR
Где ж вы раньше были? Сейчас-то, когда ТС сам нашел упоминание этого бита (который он вообще не трогал!), легко тыкать в документацию.Даташиты то когда будем читать?
Чт май 26, 2022 17:00:22
Чт май 26, 2022 17:02:47