a)Giới thiệu
Hệ thống ngắt của C28x gồm có 16 đường ngắt ,2 trong số này là ngắt không che được “Non-Maskable” (Reset , NMI) ,14 dường ngắt che được “Maskable” có nghĩa là người lập trình có thể cho phép hoặc không cho phép các đường ngắt này .
Ở ngắt che được thì có 2 trạng thái “0” và “1” .”1” có nhĩa là cho phép ngắt và “0” là không cho phép ngắt .Bằng cách đánh dấu vào thanh ghi “IER” người lập trình có thể yêu cầu một ngắt .
Ở ngắt không che được người lập trình không thể từ chối các yêu cầu ngắt .Một tín hiệu được tích cực ,chương trình sẽ ngừng lại và nhảy đến chương trình con phục vụ ngắt .
Hình 2.25 Lines Interrupt
Tất cả 16 đường ngắt được kết nối với bảng véc tơ ngắt ,bao gồm 32 bit bộ nhớ trên một ngắt .Trách nhiệm của người lập trình là điền vào bảng này địa chỉ bắt đầu của chương trình con phục vụ ngắt.
b) C28x RESET
Một sườn xuống của tín hiệu trên chân “RS” sẽ reset DSP .Sự kiện này sẽ đưa DSP bắt đầu lại từ địa chỉ reset (địa chỉ 0x3FFFC0 bộ nhớ chương trình ) chứ không phải là một ngắt theo nghĩa là chương trình cũ sẽ được tiếp tục sau khi phục vụ ngắt .Tín hiệu reset có thể bắt nguồn từ bộ watchdog hoặc từ chân RS phía ngoài.
Hình 2.26 Các nguồn reset hệ thống
Reset không chỉ đưa DSP về địa chỉ 0x3FFFC0 nó còn xóa tất cả các thanh ghi ,reset cờ CPU về trạng thái ban đầu và disable 16 ngắt.
DSP C28x có số lượng nguồn ngắt rất lớn ( hiện tại là 96 ngắt ) nhưng chỉ có 14 ngắt che được .Người lập trình phải sử dụng 1 INT_Line cho nhiều nguồn ngắt .Mỗi đường ngắt này kết nối đến một bảng véc tơ ngắt của nó.Một vùng nhớ 32 bít bên trong bảng véc tơ ngắt lưu giữ địa chỉ ngắt của các chương trình con phục vụ ngắt .Trong trường hợp nhiều ngắt được kích hoạt thì chương trình chương trình phục vụ ngắt phải được sử dụng cho tất cả các yêu cầu ngắt .Tổng kỹ thuật lập trình có thể sử dụng phần mềm để xác định các nguồn ngắt này .Tuy nhiên phương pháp này sẽ tốn nhiều thời gian và không phù hợp với các ứng dụng thời gian thực .
Hình 2.27 Các nguồn ngắt
Để giải quyết vần đề này người lập trình có thể sử dụng bộ mở rộng ngắt ngoại vi PIE (Peripheral Interrupt Expansion) .Bộ mở rộng ngắt ngoại vi mở rộng địa chỉ véc tơ ngắt rộng hơn ,đặt mỗi nhóm 32 bit cho một trong số 96 nguồn ngắt .Tốc độ phản ứng ngắt khi có sự trợ giúp của bộ phận này là nhanh hơn khi không có nó .Để sử dụng PIE người lập trình phải thay đổi bản đồ bộ nhớ (re-map) vị trí bảng véc tơ ngắt đến địa chỉ 0x00D00 .Nó nằm trong vùng bộ nhớ động .Trước khi sử dụng bộ nhớ này thì cần phải khởi tạo nó .
Hình 2.28 Thanh ghi cờ ngắt
Hình 2.29 Thanh ghi cho phép ngắt
Hình 2.30 Thanh ghi cho phép ngắt toàn cục
e)Mở rộng ngắt ngoại vi
Tất cả 96 nguồn ngắt được nhóm vào 12 PIE_Line ,8 nguồn trên 1 line .Để enable ,disable từng nguồn ngắt riêng lẻ cần phải lập trình cho nhóm thanh ghi “PIEIFRx” và “PIEIRx”.
Hình 2.31 Mở rộng ngắt ngoại vi Tất cả các nguồn ngắt được kết nối với các line theo bảng sau
Hình 2.32 Bảng phân bổ ngắt Vị trí tại bảng véc tơ ngắt lúc thiết lập lại là
Hình 2.33 Véc tơ ngắt lúc thiết lập lại PIE thay đổi bản đồ bộ nhớ như thế này
Hình 2.34 Bản đồ véc tơ PIE sau khi thiết lập lại
Như đã thấy trên hình ,vùng địa chỉ 0x000D40 đến 0x000DFF được sử dụng như là một vùng mở rộng .Bây giờ có 32 bit cho mỗi véc tơ ngắt PIEINT1.1 đến PIEI12.8.
f)C28xCPU timer
Hình 2.35 Sơ đồ khối của bộ timer
Nguồn xung clock cho bộ timer là nguồn xung clock bên trong “SYSCLKOUT” .Nó là 150MHZ nếu sử dụng tần số dao động bên ngoài là 30MHZ và sử dụng hệ số nhân PLL là 10/2 .Khi một timer được cho phép (TCR-Bit4) xung clock đi vào bộ đếm xuống 16 bít (prescaler PSCH:PSC) .Khi tràn dưới nó tạo ra một tín hiệu cho bộ đếm 32 bít (TIMH:TIM) .Một ngắt có thể được yêu cầu khi timer đếm tràn.
Thanh ghi chia 16 bít (divide down register) “THDDRH:TDDR) được sử dụng để nạp lại cho thanh ghi prescaler .Mỗi lần prescaler đếm tràn dưới giá trị từ thanh ghi divide down được nạp vào prescaler .Tương tự như vậy thanh ghi 32bit period PRDH:PRD được sử dụng để nạp lại cho bộ đếm 32 bít .
Timer 1 và timer 2 thì thường xuyên dược sử dụng bởi Texas Intruments cho hệ điều hành thời gian thực “DSP BIOS” trong khi timer 0 chỉ sử dụng cho mục đích chung .Điều này không chỉ giữ cho timer 1 và timer 2 sử dụng cùng với “DSP/BIOS” mà còn giúp chúng ta hiểu hơn về bộ PIE bởi vì timer 0 là bộ đếm thời gian duy nhất của CPU mà đi qua PIE.