АпаратнотАУпрограмний комплекс GSM-МТМ

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



iдентифiкацiСЧ переривання

mov dx,IIR[si]

in al,dx

; визначаСФмо причину переривання

; виявлено сотояние "BREAK" чи вiдбулася помилка

cmp al,0

je MSTAT_int

; данi прийнятi i доступнi для читання

cmp al,4

je RX_int

; буфер передавача порожнiй

cmp al,2

je TX_int

; змiнився стан лiнiй CTS, RI, DCD, DSR

cmp al,6

je LSTAT_int

; завершуСФмо обробку переривань

jmp FAR PTR exit_handler

LSTAT_int:

; зчитуСФмо регiстр стану лiнiСЧ i викликаСФмо функцiю

; set_err, що визначить причину переривання

mov dx,LSR[si]

in al,dx

mov al,0FFh

mov RING[si],al

call set_err

jmp next_inter

MSTAT_int:

; зчитуСФмо регiстр стану модему

mov dx,MSR[si]

in al,dx

mov al,0FFh

mov RING[si],al

jmp next_inter

TX_int:

; дивимося СЧсти чи данi для передачi модему

cmp size_s_data[si],0

jg have_data_for_send

; якщо буфер передавача порожнiй переустановлюСФмо регiстр

; керування перериваннями

mov dx,IER[si]

mov al,0Dh

out dx,al

jmp next_inter

have_data_for_send:

; передаСФмо символ модему вiдповiдно до стану

; лiнiй RS-232-З

call modem_protocol

; передаСФмо черговий символ з буфера передавача

mov bx,start_s_data[si]

mov al,send_buf[si][bx]

mov dx,DATREG[si]

out dx,al

inc bx

cmp bx,S_SIZE

jb ptr_no_max

mov bx,0

ptr_no_max:

mov start_s_data[si],bx

dec size_s_data[si]

jmp next_inter

; данi прийнятi i доступнi для читання

RX_int:

; зчитуСФмо прийнятий байти iз регiстра даних UART

mov dx,DATREG[si]

in al,dx

cmp size_r_data[si],R_SIZE

jl no_r_EOVFLOW

; буфер приймача переповнений, збiльшуСФмо вiдповiдний

; лiчильник помилок

inc WORD PTR EOVFLOW[si]

jmp next_inter

no_r_EOVFLOW:

mov bx,end_r_data[si]

mov reciave_buf[si][bx],al

inc size_r_data[si]

inc bx

cmp bx,R_SIZE

jb no_max_r_ptr

mov bx,0

no_max_r_ptr:

mov end_r_data[si],bx

jmp next_inter

exit_handler:

mov al,20h

out 20h,al

pop es

pop ds

pop di

pop bp

pop dx

pop cx

pop bx

pop ax

pop si

iret

int_hndlr4 ENDP

int_hndlr3 ENDP

int_hndlr2 ENDP

int_hndlr1 ENDP

COM_TEXT ENDS

END