Вынул содержимое "загадочных" функций - история та же - затык на опросе флажков окончания преобразования в ADC_SR. Что странно: устанавливаются флажки PDC в ADC_SR, чего в main-е нет...
__arm void timer0_c_irq_handler(void) { volatile u32 dummy; dummy = AT91C_BASE_TC0 -> TC_SR; dummy = dummy; timer0_int_counter++; AT91C_BASE_ADC -> ADC_CR = AT91C_ADC_START;//0x02 while(!(( (AT91C_BASE_ADC -> ADC_SR))&(1<<last_ch)));//last_ch = 0x05 STATUS[7] = (u8)(AT91F_ADC_GetConvertedDataCH4(AT91C_BASE_ADC)); STATUS[8] = (u8)((AT91F_ADC_GetConvertedDataCH4(AT91C_BASE_ADC)) >> 8); AT91C_BASE_AIC -> AIC_EOICR = AT91C_ID_TC0; }
АСМ:
__arm void timer0_c_irq_handler(void) { timer0_c_irq_handler: 00000C70 E52DE004 STR LR, [SP, #-4]! 00000C74 E24DD004 SUB SP, SP, #0x4 dummy = AT91C_BASE_TC0 -> TC_SR; //Acknowledge interrupt status 00000C78 E59F1134 LDR R1, [PC, #+308] ; [0xDB4] =TC0_SR (0xFFFA0020) 00000C7C E5911000 LDR R1, [R1, #+0] 00000C80 E58D1000 STR R1, [SP, #+0] dummy = dummy; 00000C84 E59D1000 LDR R1, [SP, #+0] 00000C88 E58D1000 STR R1, [SP, #+0] timer0_int_counter++; 00000C8C E59F0068 LDR R0, [PC, #+104] ; [0xCFC] =timer0_int_counter (0x200028) 00000C90 E59F1064 LDR R1, [PC, #+100] ; [0xCFC] =timer0_int_counter (0x200028) 00000C94 E5911000 LDR R1, [R1, #+0] 00000C98 E2911001 ADDS R1, R1, #0x1 00000C9C E5801000 STR R1, [R0, #+0] AT91C_BASE_ADC -> ADC_CR = AT91C_ADC_START;//0x02 00000CA0 E59F0058 LDR R0, [PC, #+88] ; [0xD00] =ADC_CR (0xFFFD8000) 00000CA4 E3A01002 MOV R1, #0x2 00000CA8 E5801000 STR R1, [R0, #+0] while(!(( (AT91C_BASE_ADC -> ADC_SR))&(1<<last_ch)));//last_ch = 0x05 00000CAC E59F0050 LDR R0, [PC, #+80] ; [0xD04] =ADC_SR (0xFFFD801C) 00000CB0 E5900000 LDR R0, [R0, #+0] 00000CB4 E3100020 TST R0, #0x20 00000CB8 0AFFFFFB BEQ 0x000CAC STATUS[7] = (u8)(AT91F_ADC_GetConvertedDataCH4(AT91C_BASE_ADC)); // 00000CBC E59F003C LDR R0, [PC, #+60] ; [0xD00] =ADC_CR (0xFFFD8000) 00000CC0 EB00003F BL AT91F_ADC_GetConvertedDataCH4::??rA ; 0xDC4 00000CC4 E59F103C LDR R1, [PC, #+60] ; [0xD08] =0x20043F 00000CC8 E5C10000 STRB R0, [R1, #+0] STATUS[8] = (u8)((AT91F_ADC_GetConvertedDataCH4(AT91C_BASE_ADC)) >> 8); // 00000CCC E59F002C LDR R0, [PC, #+44] ; [0xD00] =ADC_CR (0xFFFD8000) 00000CD0 EB00003B BL AT91F_ADC_GetConvertedDataCH4::??rA ; 0xDC4 00000CD4 E1B00420 MOVS R0, R0, LSR #8 00000CD8 E59F102C LDR R1, [PC, #+44] ; [0xD0C] =0x200440 00000CDC E5C10000 STRB R0, [R1, #+0] AT91C_BASE_AIC -> AIC_EOICR = AT91C_ID_TC0; //see Forum_reports and {p171} 00000CE0 E3E000CF MVN R0, #0xCF 00000CE4 E3C00EE0 BIC R0, R0, #0xE00 00000CE8 E3A0100C MOV R1, #0xC 00000CEC E5801000 STR R1, [R0, #+0] } 00000CF0 E28DD004 ADD SP, SP, #0x4 00000CF4 E49DE004 LDR LR, [SP], #+4 00000CF8 E12FFF1E BX LR 00000CFC 00200028 EOREQ R0, R0, R8, LSR #32 00000D00 FFFD8000 SWINV 0xFD8000 00000D04 FFFD801C SWINV 0xFD801C 00000D08 0020043F EOREQ R0, R0, PC, LSR R4 00000D0C 00200440 EOREQ R0, R0, R0, ASR #8
|