В общем проблема заключается в следующем: тупо нужно выставлять то низкий, то высокий уровень на 103 ноге микроконтроллера.
// на С GPPOE_bit.GPPOE0 = 1; GPPOE_bit.GPPOE0 = 0; GPPOE_bit.GPPOE0 = 1; GPPOE_bit.GPPOE0 = 0; .........
// либо на асме после компиляции IAR-ом GPPOE_bit.GPPOE0 = 1; 0000093C E59F0128 LDR R0, [PC, #+296] ; [0xA6C] =_A_GPPOE (0xB7A01080) 00000940 E1D010B0 LDRH R1, [R0, #+0] 00000944 E3811001 ORR R1, R1, #0x1 00000948 E1C010B0 STRH R1, [R0, #+0] GPPOE_bit.GPPOE0 = 0; 0000094C E3A010FE MOV R1, #0xFE 00000950 E3811CFF ORR R1, R1, #0xFF00 00000954 E1D020B0 LDRH R2, [R0, #+0] 00000958 E0012002 AND R2, R1, R2 0000095C E1C020B0 STRH R2, [R0, #+0] GPPOE_bit.GPPOE0 = 1; 00000960 E1D020B0 LDRH R2, [R0, #+0] 00000964 E3822001 ORR R2, R2, #0x1 00000968 E1C020B0 STRH R2, [R0, #+0] GPPOE_bit.GPPOE0 = 0; 0000096C E1D020B0 LDRH R2, [R0, #+0] 00000970 E0012002 AND R2, R1, R2 00000974 E1C020B0 STRH R2, [R0, #+0] .....
В итоге получается, что на каждый период приходится по 6-ть инструкций. Контроллер работает на частоте 60MHz, следовательно 6-ть инструкций должны выполнится за время (1/60*10^6)*6=10^(-7) секунд, т.е. 0,1 микросекунда или 10 МегаГерц. В итоге же, при запуске программы и подключения осцилографа к данному выводу, частота составляет 250 КГц (4 мксек). Не могу понять в чем причина. Может кто-нибудь знает, помогите пожалуйста разобраться.
|