PHỤ LỤC A– LẬP TRÌNH T-ENGINE AUDIO CODEC UDA1342 A.1 Modul âm thanh và lập trình sử dụng DMAC.

Một phần của tài liệu Tổng hợp tiếng nói trên T-Engine (Trang 77 - 89)

. P(S1| S1 ) P(S3| S1 ) P(S2| S3 ) P(S3| S2) = π3 a33 a33 a31 a11 a13 a32 a

PHỤ LỤC A– LẬP TRÌNH T-ENGINE AUDIO CODEC UDA1342 A.1 Modul âm thanh và lập trình sử dụng DMAC.

A.1 Modul âm thanh và lập trình sử dụng DMAC.

Các tính năng

Vi mạch này bao gồm một DMAC on-chip với 8 kênh. DMAC có thể được sử dụng để thay thế vị trí của CPU trong các thao tác chuyển dữ liệu giữa các thiết bị ngoài cùng với DACK( thông báo kết thúc DMA), bộ nhớ ngoài, các thiết bị ngoài được ánh xạ bộ nhớ và các modul ngoại vị on-chip nhằm tạo ra tốc độ chuyển dữ liệu cao. Sử dụng DMAC làm tăng hiệu năng hoạt động thiết bị.

DMAC có các tính năng sau đây:  Số kênh : 8 kênh

 Không gian địa chỉ : không gian địa chỉ vật lí  Kích thước dữ liệu : 8 bit,16 bit, 32 bit, 64 bit.  Số vận chuyển tối đa: 16M

 Lựa chọn chế độ hoạt động của DMA: chế độ yêu cầu ngoài 2 kênh hoặc DMABRG.

 Lựa chọn chế độ địa chỉ: chế độ địa chỉ đơn hoặc đôi.

 Lựa chọn yêu cầu vận chuyển: yêu cầu ngoài, yêu cầu từ các modul ngoại vi trên chip, hoặc tự động yêu cầu.

 Lựa chọn chế độ bus: lấy chu kì hoặc burst mode.

 Lựa chọn mức ưu tiên: mức ưu tiên cố định hoặc vòng tròn.  Các chức năng của kênh: các chế độ vận chuyển khác

nhau( chế độ địa chỉ, chế độ bú và các yêu cầu vận chuyển) có thể được thiết lập cho từng kênh.

 Yêu cầu ngắt: Các yêu cầu ngắt có thể được gửi tới CPU vào lúc kết thúc vận chuyển dữ liệu.

Dưới đây là sơ đồ khối của DMAC

Hình A.1 – Sơ đồ khối DMAC

Đối với các vận chuyển trong chế độ DMABRG giữa SDRAM và LCDC, HAC, SSI hoặc USB, DMABRG thực hiện các vận chuyển tốc độ cao thông qua DMABRG FIFO trong sử dụng DMAC kênh 0.DMABRG vận chuyển tối đa 32 byte dữ liệu trong một lần vận chuyển.

Sau đây là sơ đồ khối DMABRG:

Hình A.2 – Sơ đồ khối DMABRG Các chân vào ra

Tên chân Viết tắt Input/Ou

tput

Chức năng

Yêu cầu DMA DREQ0/1/2/3 Input Đầu vào yêu cầu

DMA từ thiết bị ngoài

DREQ – Khẳng định

chấp nhận DMA DRAK0/1/2/3 Output Thông báo chấp nhận yêu cầu DMA và bắt đầu thực hiện

Thông báo kết thúc DMA

DACK0/1/2/3 Output Strobe đầu ra tới thiết bị ngoài mà đưa ra DREQ 0/1/2/3

Các thanh ghi của DMAC

Thanh ghi địa chỉ nguồn DMA(SAR)

Đây là thanh ghi 32 bit đọc/ghi chỉ ra địa chỉ nguồn của một vận chuyển DMA. Trong suốt quá trình vận chuyển, chúng chỉ ra địa chỉ nguồn tiếp theo.

Trong chế độ địa chỉ đơn, giá trị của SAR bị bỏ qua khi một thiết bị ngoài với DACK đã được chỉ ra như là nguồn của vận chuyển. Các giới biên địa chỉ 16,32,64 phải được chỉ ra khi thực hiện một vận chuyển dữ liệu. Nếu địa chỉ đưa ra là không phù hợp thì một lỗi địa chỉ sẽ được phát hiện và DMAC sẽ dừng hoạt động.

Thanh ghi địa chỉ đích (DAR) (adsbygoogle = window.adsbygoogle || []).push({});

Đây là một thanh ghi 32 bít đọc ghi chỉ ra địa chỉ đích trong thực hiện DMA. Trong suốt một quá trình DMA, chúng chỉ ra địa chỉ đích tiếp theo. Trong chế độ địa chỉ đơn, giá trị DMA bị bỏ qua khi một thiết bị với DACK đã được chỉ ra như là đích của vận chuyển.

Thanh ghi bộ đếm vận chuyển(DMATCR)

Đây là thanh ghi 32 bit có thể đọc ghi chỉ ra số vận chuyển cho kênh tương ứng. Chỉ ra 0x0000 0001 nghĩa là số vận chuyển là 1 trong khi đó 0x00000000 cho ta số vận chuyển cực đại(16,777, 216). Trong suốt thao tác DMAC, số dịch chuyển còn lại được chỉ ra. Tám bit cao của DMATCR là được dự trữ và luôn phải đặt là 0.

Thanh ghi điều khiển kênh DMA (CHCR)

Đây là thanh ghi 32 bit đọc ghi chỉ ra chế độ hoạt động và các phương thức vận chuyển cho từng kênh.Bit 31 tới 28 và 27 tới 24 chỉ hợp lệ khi địa chỉ nguồn và đích trong không gian CS5 hoặc CS6 và không gian liên quan đã được chỉ ra trong không gian giao tiếp PCMCIA. Trong các trường hợp khác chúng nên được đặt là 0. Ý nghĩa cụ thể từng bit được trình bày trong tài liệu sh7760.pdf do Renesas cung cấp và em xin phép không trình bày ở đây.

Thanh ghi điều khiển hoạt động DMA (DMAOR)

Đây là thanh ghi 32 bit có thể đọc ghi chỉ ra chế độ DMA và các mức ưu tiên kênh và cho phép hoặc cấm các vận chuyển DMA.

Các thanh ghi lựa chọn nguồn yêu cầu DMA (DMARSRA, DMARSRB)

DMARSRA và DMARSRB là các thanh ghi 32 bit đọc ghi được chỉ ra nguồn yêu cầu cho mỗi kênh, cùng với các bit RS trong mỗi CHCRn. Khi các kênh là không được sử dụng hoặc vận chuyển DMA được khởi tạo bởi một yêu cầu tự động hoặc một bắt ngắt đầu vào TMU được sử dụng, DMARSR tương ứng với kênh đó được đặt là 0x00. Để tiếp tục một vận chuyển DMA bị dừng vì một lỗi địa chỉ (AE=1 trong DMAOR) hoặc một ngắt không che được( NMIF =1 trong DMAOR), thiết lập lại giá trị thanh ghi này không quan tâm đến sự thay đổi của nguồn yêu cầu tới bất cứ kênh nào, trước khi thiết lập lại AE=0 hoặc NMIF=0 trong DMAOR.

Thanh ghi điều khiển yêu cầu DMA (DMARCR)

Đây là thanh ghi 32 bit đọc ghi được cho phép chuyển giữa DRAK2 và DACK2 và giữa DRAK3 và DACK 3 trong chế độ DMABRG, lựa chọn mức ngắt cho DRAK và DACK, phát hiện DREQ0 tới 3 và chỉ ra mức ưu tiên chấp nhận cho các yêu cầu từ DREQ0 tới DREQ3 và DMABRG. Các số 0,1,2 và 3 trong các tên bit DS, RL, AL tương ứng với DREQ0, DREQ1, DREQ2, DREQ3 ( các số hiệu kênh không được chỉ ra). Thiết lập DMARCR này là không hợp lện trong các yêu cầu ngoài chế độ 2 kênh.

Thanh ghi điều khiển DMABRG (DMABRGCR)

Đây là thanh ghi 32 bit đọc ghi được có các bit cho phep tạo ra các ngắt HAC, SSI và USB, và các cờ mà chỉ ra các ngắt mà vừa mới được tạo ra.

Thanh ghi địa chỉ nguồn DMA cho âm thanh (DMAATXSAR)

Đây là thanh ghi 32 bit đọc ghi chỉ ra địa chỉ nguồn của một DMA từ SDRAm tới HAC hoặc SSI codec. DMAATXSAR0 tương ứng với HAC(0) hoặc SSI(0) và DMAATXSAR1 tương ứng với HAC(1) hoặc SSI(1). Trong suốt quá trình DMA transfer, giá trị thanh ghi là không được thay đổi.

Thanh ghi địa chỉ đích DMA cho âm thanh(DMAARXDAR)

Đây là thanh ghi 32 bit đọc ghi chỉ ra địa chỉ đích của một DMA từ HAC hoặc SSI codec tới SDRAM. DMAARXDAR0 tương ứng với HAC(0) hoặc SSI(0) và DMAARXDAR1 tương ứng với HAC(1) hoặc SSI(1). Trong suốt quá trình DMA transfer, giá trị thanh ghi là không được thay đổi.

Thanh ghi số byte truyền trong DMA của âm thanh (DMAATXTCR)

Đây là thanh ghi 32 bit đọc ghi chi ra số byte của nguồn dữ liệu audio được vận chuyển trong vận chuyển DMA tới HAC hoặc SSI codec.Nó không bị thay đổi trong quá trình thực hiện DMA Giá trị của nó nên được đặt trong khoảng từ 0x0000 0004 tới 0x03FF FFFC.Không đặt giá trị của thanh ghi là 0x0000 0000. Hoạt động bình thường không được đảm bảo khi giá trị 0x 0000 0000 được thiết lập cho thanh ghi này.

Thanh ghi số byte nhận trong DMA của âm thanh (DMAARXTCR)

Đây là thanh ghi 32 bit đọc ghi chi ra số byte của nguồn dữ liệu audio được vận chuyển trong vận chuyển DMA từ HAC hoặc SSI codec.Nó không bị thay đổi trong quá trình thực hiện DMA Giá trị của nó nên được đặt trong khoảng từ 0x0000 0004 tới 0x03FF FFFC.Không đặt giá trị của thanh ghi là 0x0000 0000. Hoạt động bình thường không được đảm bảo khi giá trị 0x 0000 0000 được thiết lập cho thanh ghi này.

Thanh ghi điều khiển DMA cho âm thanh (DMAACR)

Đây là một thanh ghi đọc ghi được chỉ ra chế độ hoạt động của HAC hoặc SSI codec.

Thanh ghi đếm trong thao tác truyền DMA cho âm thanh (DMAATXTCNT)

Đây là thanh ghi chỉ đọc chỉ ra số byte còn lại cần được vận chuyển trong vận chuyển được chỉ ra bởi DMAATXTCR. Đây là thanh ghi cấm ghi. Ghi 1 vào bit TDE trong DMAACR thiết lập giá trị DMAATXTCR trong thanh ghi này. Trong quá trình bắt buộc ngừngm số byte của vận chuyển còn lại tại thời điểm đó được chỉ ra.

Thanh ghi đếm trong thao tác nhận DMA cho âm thanh (DMAARXTCNT)

Đây là thanh ghi chỉ đọc chỉ ra số byte còn lại cần được vận chuyển trong vận chuyển được chỉ ra bởi DMAATXTCR. Đây là thanh ghi cấm ghi. Ghi 1 vào bit RDE trong DMAACR thiết lập giá trị DMAARXTCR trong thanh ghi này. Trong quá trình bắt buộc ngừng số byte của vận chuyển còn lại tại thời điểm đó được chỉ ra.

Các thanh ghi phục vụ cho thao tác với USB

Bao gồm các thanh ghi DMAUSAR, DMAUDAR, DMAURWSZ, DMAUCR.

Chế độ DMABRG (adsbygoogle = window.adsbygoogle || []).push({});

DMABRG có các FIFOs độc lập (32 bit) cho LCDC, HAC, SSI và USB. Với chúng nó thực hiện các vận chuyển dữ liệu giữa LCDC, HAC, SSI và USB và SDRAM. DMABRG vận chuyển tối đa là 32 byte dữ liệu trong một vận chuyển DMA.

Yêu cầu DMABRG

Vận chuyển DMA bằng DMABRG được thực hiện sử dụng DMAC kênh 0. Các FIFO độc lập cho LCDC, HAC, SSI và USB tạo ra các yêu cầu DMABRG. LCDC, HAC, SSI và USB mà kết nối với DMABRG có thể thực hiện tại cùng một thời điểm. CHCR0*, SAR0, và DAR) là được tự động thiết lậptheo LCDC hoặc các thiết lập thanh ghi DMABRG. CHCR, SAR0, DAR0 không cần phải thiết lập bởi CPU. Chú ý nếu CHCR0.DE=1 được thiết lập bởi CPU, một lỗi địa chỉ có thể xảy ra ( DMAOR.AE=1) và DMAC sẽ dừng thực hiện. Khi sử dụng các yêu cầu DMABRG, phải đảm bảo rằng CPU không thiết lập bit DE của CHCR0 lên 1.

Khởi động lại DMAC

DMAC của LSI này tạm dừng một vận chuyển DMA khi các điều kiện sau xảy ra: - Một ngắt không che được

- Một lỗi địa chỉ xảy ra.

Khi DMAC tạm dừng một vận chuyển DMA bởu các điều kiện trên trong khi sử dụng DMABRG(LCDC, HAC, SSI hoặc USB), thiết lập lại

DMABRG(CHCR.CHSET=1), thiết lập lại các thanh ghi DMAC và sau đó kích hoạt lại DMAC. Thiết lập bit trong DMAPCR lên 1 để khởi động lại DMABRG. Quá trình thiết lập lại bị hủy bỏ nếu xóa BRGRST về 0. Thiết lập lại DMABRG một cách bắt buộc kết thúc vận chuyển DMA cho HAC, SSI, USB hoặc LCDC. Trong trường hợp này, một ngắt vận chuyển kết thúc không được tạo ra. Thiết lập lại DMABRG khởi tạo lại các thanh ghi sau về trạng thái giống như sau khi bật điện

 DMABRGCR  DMAACR  DMAUSAR  DMAUDAR  DMAURWSZ  DMAUCR

Bằng cách thiết lập lại DMABRG sẽ làm cho các thanh ghi sau có trạng thái không xác định:  DMAATXSAR(0/1)  DMAARXDAR(0/1)  DMAATXTCR(0/1)  DMAARXTCR(0/1)  DMAATXTCNT(0/1)  DMAARXTCNT(0/1)

Không truy nhập các thanhg ghi của HAC, SSI, USB, LCDC và DMAC( ngoại trừ DMAPCR) trong khi BRGRST đang là 1. Các thao tác là không được đảm bảo khi những thanh ghi này được truy nhập trong trạng thái này. Luôn luôn ghi 0 vào bit DON trong LDCNTR trước khi ghi 1 vào BRGRST trong DMAPCR. Để hủy bỏ khởi động lại DMABRG, ghi 1 vài DON và DON2 trong LCCNTR trong LCDC và sau đó ghi 0 vào BRGRST trong DMAPCR. Chú ý là cần ghi 1 vào bit CHSET

trong CHCR0 trước khi chỉ ra các thanh ghi DMAC trong trường hợp kích hoạt lại DMAC.

Chế độ vận chuyển DMA cho HAC và SSI

Vi mạch này có 2 giao diện audio codec. HAC và SSI được gán cho giao diện audio codec. Việc gán này được lựa chọn bởi các bit IPSELR11 và IPSELR10 trong thanh ghi IPSELR của PFC. Hình 4.1 thể hiện một cấu hình của DMA cho HAC và SSI.. Vi mạch này vận chuyển dữ liệu bằng các yêu cầu DMA từ audio codec thông qua kênh 0. Một vận chuyển giữa SDRAM và audio codec được thực hiện sử dụng một FIFO 32 bit cho mỗi giao diện. Dữ liệu audio cho vận chuyển được lưu trong bộ đệm truyền/nhận của SDRAM. Bộ đệm truyền nhận được chỉ ra bằng cách chỉ ra địa chỉ bắt đầu trong DMAARXDAR hoặc DMAATXSAR và số byte cần vận chuyển được chỉ ra trong DMAARXTCR hoặc DMAATXTCR. Khi một nửa dữ liệu được vận chuyển(ngắt A0TXH, A0RXH, A1TXH, hoặc A1RXH được sử dụng) hoặc khi toàn bộ dữ liệu được vận chuyển(ngắt A0TXE, A0RXE, A1TXE, hoặc A1RXE được sử dụng) thì một ngắt có thê được tạo ra. Điều khiển bộ đệm kép cho dữ liệu âm thanh có thể được sử dụng bằng cách chuyển giữa bộ đệm truyền/nhận. DMAARXDAR, DMAATXSAR, DMAARXTCR, và DMAATXTCR có chức năng auto-reload. Khi cùng một bộ đệm được sử dụng lặp lại trong chức năng auto-reload thì không cần thiết lập lại các thanh ghi. Hình dưới cho ta cấu hình của DMA cho HAC và SSI

Hình A.3 – Cấu hình DMAC cho SSI và HAC Thao tác nhận dữ liệu âm thanh bằng DMA

Để nhận dữ liệu âm thanh trong một vận chuyển DMA, chỉ ra chế độ DMABRG trong các bit DMS1 và DMS0 trong thanh ghi DMAOR và một nguồn yêu cầu vận chuyển và mức ưu tiên chấp nhận yêu cầu trong DMARSRA và DMARCR. Sau đó xác định địa chỉ bắt đầu của bộ đệm nhận lưu trữ dữ liệu âm thanh trong DMAARXDAR và số byte vận chuyển trong DMAARXTCR Ghi 1 vào bit RDE trong DMAACR để bắt đầu nhận dữ liệu.

Thao tác truyền âm thanh bằng DMA

Để chuyển dữ liệu âm thanh trong một vận chuyển DMA, chỉ ra chế độ DMABRG trong các bit DMS1 và DMS0 trong thanh ghi DMAOR và một nguồn yêu cầu vận chuyển và mức ưu tiên chấp nhận yêu cầu trong DMARSRA và DMARCR. Sau đó xác định địa chỉ bắt đầu của bộ đệm chuyển lưu trữ dữ liệu âm thanh trong

DMAARXDAR và số byte vận chuyển trong DMAARXTCR Ghi 1 vào bit TDE trong DMAACR để bắt đầu nhận dữ liệu.

Chức năng tự nạp địa chỉ của DMAC

DMAC dừng thực hiện một vận chuyển DMA cho HAC hoặc SSI khi số byte dữ liệu được chỉ ra trong DMAATXTCR hoặc DMAARXTCR hoàn thành. Khi vận chuyển kết thúc, các thiết lập chỉ ra trước đây được đọc từ DMAARXDAR hoặc DMAATXSAR. Khi bắt đầu lại một vận chuyển với cùng địa chỉ và cùng số byte, ghi 1 vào bit kích hoạt DMA(RDE hoặc TDE) trong thanh ghi DMAACR để kích hoạt lại DMAC. Không cần thiết phải chỉ ra lại các thanh ghi DMAARXDAR và DMAATXSAR. Khi các bít tự nạp lại (RAR hoặc TAR) trong DMAACR là 1, DMAC tự động kích hoạt và thực hiện vận chuyển giữa bộ đệm gửi/nhận và audio codec một cách lặp đi lặp lại. Để kết thúc một vận chuyển DMA với chức năng tự nạp lại được thiết lập thì ta ghi 1 vào bit bắt buộc kết thúc(RDS hoặc TDS) trong DMAACR.

Bắt buộc kết thúc một vận chuyển DMA cho âm thanh

Để bắt buộc một vận chuyển DMA kết thúc trong khi số byte vận chuyển được chỉ ra trong DMAATXTCR hoặc DMAARXTCR là chưa hoàn thành, ta ghi 1 vào bit kết thúc DMA (RDS hoặc TDS) trong thanh ghi DMAACR. Trong việc bắt buộc dừng, một ngắt kết thúc vận chuyển cũng có thể được tạo ra. Trong một quá trình bắt buộc dừng, số byte vận chuyển còn dư được chỉ ra trong DMAATXTCNT hoặc DMAARXTCNT. Bộ đếm dữ liệu âm thanh nạp giá trị DMAATXTCR hoặc DMAARXTCR trong quá trình kích hoạt DMAC( khi RDE hoặc TDE trong DMAACR là 1) và bị giảm mỗi lần một DMA transfer được thực hiện. Khi tiếp tục một DMA transfer sau quá trình bắt buộc dừng, cần kiểm tra giá trị bộ đếm DMA và xác định lại địa chỉ đầu và số byte và sau đó khởi động lại DMAC. Bởi vì dữ liệu audio được vận chuyển sử dụng FIFO, tất cả dữ liệu nhận được có thể không được lưu trong bộ đệm tại thời điểm buộc kết thúc DMA. Khi bit ngừng thực hiện DMA (RDS bit) trong DMAACR được đọc là 0, dữ liệu được hoàn toàn lưu trữ. Xác định lại các thanh ghi với RDS và TDS được đặt lên 1 không kích hoạt lại DMA. Xóa bit cho phép DMA của HAC hoặc SSI về 0 trước khi bắt buộc kết thúc 1 vận chuyển.

Bộ đệm kép cho dữ liệu âm thanh

Có 2 kiểu của ngắt kết thúc vận chuyển:

 A0TXH, A0RXH, A1TXH, hoặc A1RXH (Một nửa dữ liệu đã được truyền/nhận)

 A0TXE, A0RXE, A1TXE, or A1RXE( toàn bộ dữ liệu đã được truyền/nhận)

Bằng cách thiết lập chức năng tự nạp địa chỉ, không cần thiết phải chỉ ra lại các thanh ghi cho vận chuyển thứ 2 và các vận chuyển tiếp theo.

 Chú ý:

 Khi kích thước được chỉ ra trong DMAARXTCR hoặc (adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu Tổng hợp tiếng nói trên T-Engine (Trang 77 - 89)