|
|
  |
ADuC841, работа с XRAM, интересует возможность косвенной адресации после #FFh, ну или как выкр |
|
|
|
May 17 2008, 11:57
|
Частый гость
 
Группа: Участник
Сообщений: 116
Регистрация: 24-09-06
Пользователь №: 20 645

|
Цитата(novlev @ May 17 2008, 12:59)  День добрый, использую XRAM, но возникла проблема - после адреса #00FFh как работать? Вроде выкрутился
|
|
|
|
|
May 25 2008, 10:52
|
Частый гость
 
Группа: Участник
Сообщений: 116
Регистрация: 24-09-06
Пользователь №: 20 645

|
((((((((( нет, вру - не выкрутился. Ситуация следующая: есть буфер из 20 байтов, начало по адресу 0100 в XRAM. При отправке этого буфера на персоналку периодически пакет портится, а именно 18 и 19 байты меняют значения, при этом контрольная сумма остается правильной(для первоначального пакета). Вот пример процедуры (упрощенный, но ошибка осталась) : mov DPTR, #000100h nah_otsuda0:
movx a, @DPTR mov r6, a mov r7, #00h; ;-----------------------------------------------------------------------------
;---------------------------------------------------------------------------- call quart_wr; inc DPTR
djnz r3, nah_otsuda0
Если прерывания запретить, то все нормально работает. Но прерывание только одно(от таймера) и с XRAM я в нем не работаю. Указатель адреса и страници сохраняю в стеке, аккумулятор и регистр расширения(В)... Надоумте, в чем проблема ????????(ну кроме как в днк)))
|
|
|
|
|
May 26 2008, 06:38
|

Местный
  
Группа: Участник
Сообщений: 235
Регистрация: 28-01-05
Из: Санкт-Петербург
Пользователь №: 2 276

|
Цитата(novlev @ May 25 2008, 14:52)  ((((((((( нет, вру - не выкрутился. Ситуация следующая: есть буфер из 20 байтов, начало по адресу 0100 в XRAM. При отправке этого буфера на персоналку периодически пакет портится, а именно 18 и 19 байты меняют значения, при этом контрольная сумма остается правильной(для первоначального пакета). Вот пример процедуры (упрощенный, но ошибка осталась) : mov DPTR, #000100h nah_otsuda0:
movx a, @DPTR mov r6, a mov r7, #00h; ;-----------------------------------------------------------------------------
;---------------------------------------------------------------------------- call quart_wr; inc DPTR
djnz r3, nah_otsuda0
Если прерывания запретить, то все нормально работает. Но прерывание только одно(от таймера) и с XRAM я в нем не работаю. Указатель адреса и страници сохраняю в стеке, аккумулятор и регистр расширения(В)... Надоумте, в чем проблема ????????(ну кроме как в днк))) Чудес не бывает. Выкладывайте quart_wr и обработчики всех ваших прерываний. Да ичто находится между двух строк ;-------------- ?????Если там кусок кода, то выложите этот цикл полностью.
--------------------
Удачи.
|
|
|
|
|
May 26 2008, 06:44
|
Частый гость
 
Группа: Участник
Сообщений: 116
Регистрация: 24-09-06
Пользователь №: 20 645

|
))чудес не бывает, а вот г... случается вот подпрограмка записи в уарт quart_wr: ; Подпрограмма записи во внешний UART ; R7 - address ; R6 - data; clr ea mov P0, r7 setb P3.3 nop clr P3.3 mov a, blic anl a, #10111111b ORL a, #10000000b mov blic, a mov p0, blic setb P3.4 nop clr P3.4 clr P3.2 mov P0, r6 setb P3.2 mov a, blic anl a, #10111111b ORL a, #11000000b mov blic, a mov p0, blic setb P3.4 nop clr P3.4 setb ea ret а вот обработчик прерывания от таймера what_time_is_it_now: nop nop clr ea CLR TF0 push PSW push ACC push DPP push DPL push DPH mov b_temp, b mov r0_temp, r0 mov r1_temp, r1 mov r2_temp, r2 mov r3_temp, r3 mov r4_temp, r4 mov r5_temp, r5 ;mov r6_temp, r6 ;mov r7_temp, r7 inc drive mov a, drive cjne a, #02h, no_drive_1 setb adc_conv no_drive_1: cjne a, #04h, no_drive_2 setb flag no_drive_2: cjne a, #06h, no_drive_3 setb hook no_drive_3: cjne a, #08h, no_drive_4 setb adc_conv1 mov drive, #0 no_drive_4: inc msCnt inc timer24 inc OU_COUNT inc T0ImpCnt mov a, T0ImpCnt cjne a, #04h, _160ms mov T0ImpCnt, #0 inc TH2 inc TL2 inc RCAP2L inc __160__ mov a, __160__ cjne a, #0A0h, _160ms mov __160__, #0 inc KDU1_SilenceCnt inc KDU2_SilenceCnt inc KDU3_SilenceCnt ;call time_out _160ms: ;_____________________________________________ ; ;Для интервала в 10ms\и других> ;_____________________________________________ ;*************************************чтение из внешнего уарта каждые 0.5 мс********************************************** MOV A, #01h cjne a, OU_COUNT, no_ouart setb time_to_read ;call tablo mov OU_COUNT, #00h no_ouart: ;******************************************************************************* ************************************************* MOV A, #0FAH cpl a add a, timer24 cpl a jnz nexX mov timer24, #0 inc msCnt_1 MOV A, #08h cpl a add a, msCnt_1 cpl a jnz nexX ;call lamp1 ;lcall lamp mov a, bit_mig cpl a anl a, #00000001b mov bit_mig, a mov msCnt_1, #0 ;*****************************************Таймер включения питания на ключах***************************************** nexX: ;MOV A, #07H ;cpl a ;add a, msCnt ;cpl a ;jnz next_ MOV A, #02h cjne a, msCnt, no_tablo ;call tablo mov msCnt, #00h no_tablo: ;call swich_on ;next_: ;MOV A, #09h ;cpl a ;add a, msCnt ;cpl a ;jnz no_ ;setb key ;no_: ;MOV A, #0AH ;cpl a ;add a, msCnt ;cpl a ;jnz exit_count ;mov msCnt, #00h ;call swich_off ;******************************************************************************* ************************************************* exit_count: pop PSW pop ACC pop DPP pop DPL pop DPH mov b, b_temp mov r0, r0_temp mov r1, r1_temp mov r2, r2_temp mov r3, r3_temp mov r4, r4_temp mov r5, r5_temp ;mov r6, r6_temp ;mov r7, r7_temp mov TH0, #0EAh mov TL0, #66h SETB TR0;<------------------------------------Restart setb ea reti между двух строк я просто вставлял код записи в уарт, для теста. Уарт - это внешняя микросхема (8 канальный). На другом блоке аналогичный код работает. Может я некорректно с ХRAMом работаю. Если что, вот аська 221542155 Если запретить прерывание - ошибки исчезают, но это грубое решение
Сообщение отредактировал novlev - May 26 2008, 07:08
|
|
|
|
|
May 26 2008, 09:30
|

Местный
  
Группа: Участник
Сообщений: 235
Регистрация: 28-01-05
Из: Санкт-Петербург
Пользователь №: 2 276

|
Цитата(novlev @ May 26 2008, 10:44)  ))чудес не бывает, а вот г... случается кусь кусь а вот обработчик прерывания от таймера what_time_is_it_now: nop nop clr ea CLR TF0 push PSW push ACC push DPP push DPL push DPH >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ХРУМ pop PSW pop ACC pop DPP pop DPL pop DPH mov b, b_temp mov r0, r0_temp mov r1, r1_temp mov r2, r2_temp mov r3, r3_temp mov r4, r4_temp mov r5, r5_temp ;mov r6, r6_temp ;mov r7, r7_temp mov TH0, #0EAh mov TL0, #66h SETB TR0;<------------------------------------Restart setb ea reti между двух строк я просто вставлял код записи в уарт, для теста. Уарт - это внешняя микросхема (8 канальный). На другом блоке аналогичный код работает. Может я некорректно с ХRAMом работаю. Если что, вот аська 221542155 Если запретить прерывание - ошибки исчезают, но это грубое решение  А почему вы из стека восстанавливаете все задом на перед.??? Или это особенность Analog Devices ????
--------------------
Удачи.
|
|
|
|
|
May 26 2008, 09:54
|
Частый гость
 
Группа: Участник
Сообщений: 116
Регистрация: 24-09-06
Пользователь №: 20 645

|
действительно, огромное спасибо, в спешке и не заметил эту лажу, со статикой боролся  еще раз спасибо, сейчас на прогонку пославлю. за 45 минут ошибка не появилась, еще раз спасибо. Зато замечен глюк адука, вочдок не срабатывает иногда, хотя кварц живой, это по результатам испытаний на статику (8кВ)
Сообщение отредактировал novlev - May 26 2008, 10:43
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|