PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Câu hỏi dsPIC thường gặp (http://www.picvietnam.com/forum/forumdisplay.php?f=69)
-   -   khai báo ngắt trong C30 như thế nào? (http://www.picvietnam.com/forum/showthread.php?t=1662)

sandro_bk 31-10-2007 02:40 PM

khai báo ngắt trong C30 như thế nào?
 
tôi mới tập viết chương trình bằng C30,đang làm về ngắt,tôi thấy bác Nam viết chương trình mẩu có xài ngắt timer1,ngắt ADC nhưng tôi dịch thử mấy file này thì chương trình nó warning là
PSV model not specified for '_ADCInterrupt' đối với ngắt ADC,mấy cái ngắt này khai báo ở đâu và làm sao chương trình nó biết chương trình con này "void _ISR _ADCInterrupt(void)" là phục vụ ngắt ADC,tiện đây cho hỏi chưong trình con phục vụ ngắt PWM là "void _ISR _PWMInterrupt(void)" phải ko? trong chương trình tôi đã add đủ 30f4011.h và 30f4011.gld

namqn 31-10-2007 05:40 PM

Trích:

Nguyên văn bởi sandro_bk (Post 12480)
tôi mới tập viết chương trình bằng C30,đang làm về ngắt,tôi thấy bác Nam viết chương trình mẩu có xài ngắt timer1,ngắt ADC nhưng tôi dịch thử mấy file này thì chương trình nó warning là
PSV model not specified for '_ADCInterrupt' đối với ngắt ADC,mấy cái ngắt này khai báo ở đâu và làm sao chương trình nó biết chương trình con này "void _ISR _ADCInterrupt(void)" là phục vụ ngắt ADC,tiện đây cho hỏi chưong trình con phục vụ ngắt PWM là "void _ISR _PWMInterrupt(void)" phải ko? trong chương trình tôi đã add đủ 30f4011.h và 30f4011.gld

- Về PSV, các phiên bản 3.x về sau của C30 đã bổ sung thêm thuộc tính liên quan đến PSV cho dẫn hướng liên quan đến khai báo ngắt. Do đó, lấy ví dụ khai báo ngắt Timer 1 trong tập tin 'Vidu2-1.c' của tôi là
Code:

void _ISR _T1Interrupt(void)
cần được chuyển thành
Code:

void _ISR_PSV _T1Interrupt(void)
_ISR đã được định nghĩa sẵn trong C30, còn _ISR_PSV được tôi định nghĩa như sau:
Code:

#define _ISR_PSV __attribute__((interrupt, auto_psv))
- Về việc làm sao trình biên dịch biết chương trình con nào trình phục vụ ngắt cho ngắt gì, bạn mở tập tin '30f4011.gld', và kéo xuống đến phần 'Primary Interrupt Vector Table', bạn sẽ thấy các tên được định nghĩa sẵn (quy ước trước) cho các trình phục vụ ngắt.

- Chẳng hạn, ngắt cho PWM nên được đặt tên là '_PWMInterrupt'. Và bạn định nghĩa nó theo cú pháp mới mà tôi đã nói ở trên, nếu bạn đang dùng C30 phiên bản 3.x trở lên, nghĩa là
Code:

void _ISR_PSV _T1Interrupt(void)
với _ISR_PSV được định nghĩa như trên trong code của bạn.

Thân,

sandro_bk 31-10-2007 10:52 PM

cảm ơn bác Nam đã giải thích,em đã thử dịch chương trình ví dụ 5.1 của bác,em bỏ phần biến đổi ADC chỉ xuất PWM giá trị cố định nhưng ko hiểu sao các chân PWM3H và PWM3L ko chạy,còn các chân khác xuất bình thường,có khi nào các chân I/O này đã hư, hỏi thêm bác về phần thạch anh,con 30f4011 cho chạy đến 30 MIPS,em xài thạch anh 8Mhz cho chạy chế độ XT PLL16 tính ra là over clock nhưng nó vẫn cứ chạy bình thường ko biết nếu chạy như vậy có đảm bảo pic làm việc đúng ko?

p/s :em có sửa lại cho nó chạy chế độ complementary

namqn 01-11-2007 12:41 AM

Trích:

Nguyên văn bởi sandro_bk (Post 12489)
cảm ơn bác Nam đã giải thích,em đã thử dịch chương trình ví dụ 5.1 của bác,em bỏ phần biến đổi ADC chỉ xuất PWM giá trị cố định nhưng ko hiểu sao các chân PWM3H và PWM3L ko chạy,còn các chân khác xuất bình thường,có khi nào các chân I/O này đã hư, hỏi thêm bác về phần thạch anh,con 30f4011 cho chạy đến 30 MIPS,em xài thạch anh 8Mhz cho chạy chế độ XT PLL16 tính ra là over clock nhưng nó vẫn cứ chạy bình thường ko biết nếu chạy như vậy có đảm bảo pic làm việc đúng ko?

p/s :em có sửa lại cho nó chạy chế độ complementary

Không rõ bạn sửa lại giá trị cho PWMCON1 như thế nào? Với cách dùng như của bạn, tôi sẽ đặt PWMCON1 là 0x00FF.

Nếu bạn chỉ dùng ít ngoại vi thì chip có thể không bị nóng lắm, khi đó bạn sẽ có thể chạy ở 32 MIPS. Tuy nhiên, chế độ làm việc này không được Microchip bảo đảm. Để học tập thì có lẽ bạn không cần Microchip đảm bảo các chỉ tiêu kỹ thuật.

Thân,

sandro_bk 01-11-2007 01:26 AM

em khai báo đúng như bác nói,còn cái này nữa,em thử khai báo cho port E là TRISE = 0xFFC3,nhưng RE0,RE1 vẫn xuất PWM ko biết sao nữa

falleaf 01-11-2007 05:04 PM

C30 Compiler User's Guide:

Bạn xem tài liệu này chương 7, nó trình bày tất cả các cách viết hàm ngắt với C30, các vấn đề khác của C30 cũng được đề cập trong tài liệu này.

Chúc vui


Múi giờ GMT. Hiện tại là 12:45 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam