Trích:
Nguyên văn bởi escapevn
Hic, tại lúc trước em quên ko add file libdsp-coff.a nên sử dụng hàm dsp mới không được anh à. Bây giờ thì OK rồi.
Bác giải thích cho em về các thanh ghi CORCON và các thanh Accumulator, vai trò của nó trong các hàm DSP đc không? Các hàm dsp tác động tới số kiểu fractional và float thì khác nhau thế nào?
Còn các thanh ghi như XMODSRT, XMODEND, YMODSRT, YMODEND có vai trò thế nào trong dsp? em thấy trong ví dụ về FIR của microchip thì họ có modified mấy thanh ghi này.
Mong bác giúp đỡ.
|
Phần này khá dài dòng, tôi giải thích vắn tắt dưới đây:
Thanh ghi CORCON:
US: Bit điều khiển dấu các phép nhân của DSP (có dấu hay không dấu)
EDT: Bit điều khiển chấm dứt sớm vòng lặp DO, đọc về luôn là '0'
DL<2:0>: Các bit thể hiện mức lồng của vòng lặp DO (0 đến 7)
SATA: Bit cho phép thanh ghi AccA bão hòa (bị chặn)
SATB: Bit cho phép thanh ghi AccB bão hòa (bị chặn)
SATDW: Bit cho phép bão hòa không gian dữ liệu ghi từ DSP
ACCSAT: Bit chọn chế độ bão hòa của thanh ghi tích lũy (bình thường hay siêu bão hòa)
IPL3: Bit trạng thái mức ưu tiên ngắt (dùng kết hợp với IPL<2:0> trong thanh ghi trạng thái SR)
PSV: Bit cho phép PSV (Program Space Visibility) trong không gian dữ liệu
RND: Bit chọn chế độ làm tròn (có thiên hướng-quy ước hay không thiên hướng-hội tụ)
IF: Bit chọn chế độ nhân số nguyên hay fractional
Lõi DSP trong dsPIC chỉ xử lý số nguyên hay fractional, các số float sẽ được chuyển thành số fractional để xử lý, sau đó trả kết quả về dạng float trở lại. Để tăng tốc độ tính toán, dsPIC dùng 2 thanh ghi tích lũy, để load đồng thời hai toán hạng. Đây cũng là lý do để xuất hiện hai thanh ghi địa chỉ X và Y, cũng như các vùng nhớ tương ứng.
Nếu dùng các lệnh DSP có đọc dữ liệu thì bắt buộc phải dùng cả hai vùng nhớ X và Y, do đó phải set up các thanh ghi XMODSRT, XMODEND, YMODSRT, và YMODEND cho chính xác. Các lệnh DSP ghi dữ liệu chỉ thông qua bus X.
XMODSRT, XMODEND: các thanh ghi địa chỉ bắt đầu và kết thúc cho các bộ đệm modulo (vòng) trong không gian địa chỉ bộ nhớ dữ liệu X
YMODSRT, YMODEND: các thanh ghi địa chỉ bắt đầu và kết thúc cho các bộ đệm modulo (vòng) trong không gian địa chỉ bộ nhớ dữ liệu Y
Bạn xem thông tin chi tiết trong các tài liệu sau của Microchip:
DS51456c: 16-bit Language Tool Libraries
DS70046e: dsPIC30F Family Reference Manual
DS70157b: dsPIC30F/33F Programmer's Reference Manual
Về việc dùng các hàm ma trận với dữ liệu float, thư viện DSP của Microchip cung cấp hai hàm chuyển đổi giữa float và fractional, do đó bạn có thể chuyển số float thành fractional, dùng các hàm xử lý, sau đó trả lại về số float nếu bạn muốn, thông qua 2 hàm chuyển đổi này.
Thân,