Thực hiện chơng trình trên evm tms320F/c

Một phần của tài liệu NGHIÊN CỨU ÁP DỤNG HỆ PHÁT TRIỂN DSP DÙNG CODE COMPOSER (Trang 104 - 109)

- Bớc 2: Trong cửa sổ soạn thảo, nhập mã nguồn sau đây vào file Testevm.c:

thực hiện chơng trình trên evm tms320F/c

4.1. Chơng trình kiểm tra EVM Board4.1.1 Điều khiển DAC 4.1.1 Điều khiển DAC

Để ghi DAC cần phải thực hiện qua các bớc: - Ghi ra cổng DAC dữ liệu, địa chỉ cổng ADC nh sau:

DAC0 : 0000h DAC1 : 0001h DAC2 : 0002h DAC3 : 0003h

- Đợi khoảng thời gian để dữ liệu ổn định

- Ghi dữ liệu bất kỳ ra thanh cập nhật (Cho phép dữ liệu ra ADC) void write_dac(unsigned int dac_num, unsigned int dac_val) {

unsigned int write_dac_status; if (dac_num < 4)

{

dacdata = dac_val; /* Đa dữ liệu vào biến toàn cục */ switch (dac_num)

{

case DAC0:

OUTMAC( _DAC0, dacdata); /* Kênh 0 */ break;

case DAC1:

OUTMAC( _DAC1, dacdata); /* Kênh 1 */ break;

case DAC2:

OUTMAC( _DAC2, dacdata); /* Kênh 2 */ break;

case DAC3:

OUTMAC( _DAC3, dacdata); /* Kênh 3 */ break;

}

OUTMAC( _DAC_XFER, dacdata); /* Cho phép dữ liệu ra */ }

}

4.1.2 Điều khiển ADC

Để nhận dữ liệu từ ADC cần phải thực hiện qua các bớc: - Bật các bít cho phép ADC làm việc

- Chọn kênh

- Phát dữ liệu khởi động ADC

- Đợi khoảng thời gian để ADC biến đổi xong - Đọc dữ liệu từ ADC

- Dịch phải 6 bít (xóa các bít thừa)

unsigned int read_ad2(unsigned int chan_num) {

unsigned int read_val, ctr; /* Chọn kênh và khởi động */ read_val = ( ADCIMSTART | ADC2EN | ADC1EN | ADCSOC); /*bật các bít cho phép*/ if (chan_num < 8) { read_val |= (chan_num * 2); } else { read_val |= ((chan_num-8) * 16); }

ad2ptr->adctrl1 = read_val; /* start conversion */ read_val = 0x0080;

ctr = 0xffff;

while ((read_val & 0x0080) && (ctr)) { read_val = ad2ptr->adctrl1; ctr--; /* dec the ctr */ } if (ctr) { if (chan_num < 8)

{

read_val = ad2ptr->adcfifo1; /* read from 1st fifo */ }

else {

read_val = ad2ptr->adcfifo2; /* read from 2nd fifo */ }

read_val >>= 6; /* shift it down */ return(read_val);

}

return((unsigned int) 0x8000); }

4.1.3 Điều khiển LED

- Địa chỉ cổng vào ra của 8 LED là 000Ch

- Việc bật hoặc tắt LED đợc thực hiện bằng việc bật hoặc xóa bit tơng ứng của Byte dữ liệu, sau đó ghi byte này ra cổng 000Ch.

void ti_led_on( unsigned int led_num ) {

unsigned int pattern; pattern = 0x0001; while (--led_num) {

pattern <<= 1; /* move bit over */ }

ti_led_data |= pattern;

OUTMAC( _TI_LED, ti_led_data); /* turn on the led */ }

void ti_led_off( unsigned int led_num ) {

unsigned int pattern; pattern = 0x0001; while (--led_num) {

pattern <<= 1; /* move bit over */ }

ti_led_data &= (~pattern);

OUTMAC( _TI_LED, ti_led_data); /* turn off the led */ }

4.1.4 Đọc trạng thái các Switch

Trạng thái các Switch đợc nhận ở cổng vào ra có địa chỉ 0008h, các bít dữ liệu nhận đợc bằng 0 nếu Switch tắt, bằng 1 nếu Switch bật.

4.1.5 Kiểm tra bộ nhớ

1. Kiểm tra dải, nếu có lỗi cho mã lỗi 1 2. Điền đầy toàn bộ dải với dữ liệu là số 0 3. Kiểm tra việc điền, nếu có lỗi cho mã lỗi là 2 4. Điền đầy toàn bộ dải với dữ liệu là số 0xffff 5. Kiểm tra việc điền, nếu có lỗi cho mã lỗi là 3 6. Điền đầy toàn bộ dải với dữ liệu là số 0 7. Kiểm tra việc điền, nếu có lỗi cho mã lỗi là 4 8. Điền đầy toàn bộ dải với dữ liệu là số 0xaaaa 9. Kiểm tra việc điền, nếu có lỗi cho mã lỗi là 5 10. Điền đầy toàn bộ dải với dữ liệu là số 0x5555 11. Kiểm tra việc điền, nếu có lỗi cho mã lỗi là 6

4.2. Chơng trình xây dựng bộ lọc số trên công cụ MATLAB version 6.0

Trong phần này tác giả đã lựa chọn xây dựng chơng trình ứng dụng về bộ lọc FIR và bộ lọc thích nghi. Để chạy chơng trình này, tại cửa sổ lệnh của MATLAB ta gõ lệnh: >> boloc ↵ .

4.2.1 Thiết kế bộ lọc FIR

Bài toán đặt ra: Cho 3 tín hiệu ở ba tần số nh sau: f1=750 x1=sin(2*pi*f1*t) Tần số lấy mẫu: 8kHz f2=2500 x2=sin(2*pi*f2*t)

f3=3000 x3= sin(2*pi*f3*t)

Trong bài toán này để thiết kế bộ lọc FIR với tần số dải thông = 1600Hz, tần số dải chặn = 2400Hz, độ khuếch đại dải thông = 0dB, độ suy giảm dải chặn = 20dB, và hệ số lấy mẫu = 8000Hz, sử dụng phơng pháp Parks-McClellan thông qua hàm “remez” của Matlab. Kết quả ta đợc đồ thị đáp ứng pha và biên độ nh hình 4-2.

Hệ số của bộ lọc FIR sau khi thiết kế trong bảng 4-1

Hệ số Giá trị

B0 0.0537

B1 0.0000

B2 -0.0916

B3 -0.0001 B4 0.3131 B5 0.4999 B6 0.3131 B7 -0.0001 B8 -0.0916 B9 0.0000 B10 0.0537

• Đoạn chơng trình sau thiết kế bộ lọc FIR trên Matlab: Hình 4-3. Tín hiệu gốc và sau khi lọc

Một phần của tài liệu NGHIÊN CỨU ÁP DỤNG HỆ PHÁT TRIỂN DSP DÙNG CODE COMPOSER (Trang 104 - 109)