;************************************************************************
nolist
include 'ioequ.asm'
include 'intequ.asm'
include 'ada_equ.asm'
include 'ada_init.asm'
;
XBASE
equ $0
; Hằng địa chỉ bắt đầu số liệu ở bộ nhớ X
YBASE
equ $0
; Hằng địa chỉ bắt đầu số liệu ở bộ nhớ Y
PBASE
equ $100
; Hằng địa chỉ bắt đầu chương trình ở bộ nhớ P
P_RESET equ $0
; Hằng địa chỉ Véc tơ ngắt RESET
ORDER
equ 101
; Hằng số là bậc N của bộ lọc số FIR
START_X equ $100
; Địa chỉ đầu mảng số liệu tác động x(n) ở bộ nhớ Y
;
; ****** ******
org
x:XBASE
; Thiết lập địa chỉ đầu số liệu ở bộ nhớ X
List
dc 0.00049189988593 ; Nhập mảng hằng 101 phần tử là giá trị các
dc 0.00031992920792 ; mẫu h(k) của đặc tính xung h(n) (Mảng các hệ
…..…
; số của bộ lọc số FIR pha tuyến tính bậc N=101).
;
; ****** ******
org
y:YBASE
; Thiết lập địa chỉ đầu số liệu ở bộ nhớ Y
; ****** ******
org
p:P_RESET
; Địa chỉ véc tơ ngắt RESET
jmp
MAIN
; Nhẩy đến điểm bắt đầu của chương trình
; ****** ******
org
p:PBASE
; Điểm bắt đầu của chương trình chính tương ứng
;
với địa chỉ p:PBASE
MAIN
; ****** Khởi tạo hệ thống ******
movep #$040004,x:M_PCTL ; Khởi tạo vòng khóa pha PLL các bộ vi xử lý
; DSP563xx : PLL 5*19.6608=98.304MHz
ori
#3,mr
; Thiết lập các bit che ngắt ở thanh ghi MR
movec #0,sp
; Xóa con trỏ ngăn xếp
move #0,omr
; Thiết lập chế độ làm việc Mode0
move #$40,r7
; Nạp hằng số $40 cho thanh ghi r7
move #-1,m7
; Nạp địa chỉ -1 cho thanh ghi m7
jsr
ada_init
; Gọi chương con khởi tạo AUDIO CODEC
move #START_X,r4
; Nạp địa chỉ đầu mảng x(n) vào thanh ghi R4
move #64,m4
; Nạp độ dài mảng x(n) vào thanh ghi M4
clr
a
; Xóa thanh chứa A
rep
m4
; Quay vòng lặp lệnh tiếp theo 64 lần
101
move a,y:(r4)+
movep x:M_SSISR0,a0
movep a0,x:M_TX00
; Xóa vùng nhớ 64 từ mảng x(n) ở bộ nhớ Y
; Đọc thanh ghi trạng thái của ESSI0 vào A0
; và nạp vào thanh ghi số liệu phát 0 của nó
;
LOOP_0
; Điểm bắt đầu vòng lặp chính của bộ lọc FIR
FRAME brset #3,x:M_SSISR0,FRAME ; Đợi sườn lên xung đồng bộ đầu tiên
movep x:M_SSISR0,a0
; Đọc thanh ghi trạng thái của ESSI0 vào A0
movep x:M_RX0,a0
; Đọc thanh ghi số liệu đến cổng ESSI0
Lap_1
brclr #7,x:M_SSISR0,Lap_1
; Đợi thiết lập cờ rxdf
clr
a
; ****** ******
move #start_adress,r6
; Thuc hien thao tac ghi dịch
move #(start_adress-1),r4
do
#ORDER,end_do
move y:(r6)+,a0
move a0,y:(r4)+
end_do
; Kết thúc ghi dịch, nạp mẫu mới
; ****** ******
clr
a
movep x:M_SSISR0,a0
movep x:M_RX0,a0
move #(400+ORDER -1),r6
; 400 + order -1 =499
move a0,y:(r6)
; ****** Vòng lặp tính các phần tử phản ứng y(n) và gửi vể CS4270 ******
fir
clr
a
move #List,r0
move x:(r0),x0
move y:(r6),y0
rep
#order
mac x0,y0,a x:(r0)+,x0 y:(r6)-,y0
Lap_2
brclr #6,x:M_SSISR0,Lap_2
; Đợi thiết lập cờ tdre
movep a,x:M_TX00
jmp
LOOP_0
; Nhẩy về nhận mảng tác động x(k) tiếp
nolist
end
;************************************************************************