(Híc híc, thật ra đây là lần đầu tiên em dùng assembler, vì thế em chỉ sửa lại file 4012.s những thông số cho phù hợp với phần cứng của em thôi).
Nếu bạn chưa quen với assembler thì đọc tutorial 1 đi, vài hôm nữa tôi sẽ post tutorial 2. Khi đã quen với assembler rồi thì bạn có thể quay lại cái bootloader này để thử sức.
Cám ơn anh Namqn nhiều,em đã thử và sửa được chương trình bootloader cho dsPic rồi,em xin bổ xung thêm :Cần khai báo max_flash tương ứng với dsPic xử dụng.Trường hợp dùng int osc có thể hiệu chỉnh tần số dao động bằng cách thay đổi các bit TUNES của thanh ghi OSC reg.
Anh có dùng C30 để viết chương trình cho dspic không? Em dùng chương trình nầy,nhưng khi xử dụng lệnh : printf thì gặp lỗi : Erro: a heap is required.Mong anh giúp em khắc phục lỗi nầy.
Nếu bạn có dùng lệnh thư viện vào/ra (input/output) thì trình liên kết yêu cầu bạn mô tả heap, mặc dù nó có thể là một heap trống (không chứa gì cả).
Nếu bạn chỉ dùng lệnh printf để xuất thông tin ra stdout thì chỉ cần chọn lệnh mênu Project->Build Options ... ->Project, sau đó đến thẻ MPLAB LINK30, gõ vào giá trị 0 tại ô mô tả heap size, như hình minh hoạ dưới đây.
Chúc thành công!
Kích thước của heap chỉ thực sự quan trọng khi bạn sử dụng các hàm cấp phát bộ nhớ động của C, chẳng hạn như malloc(), free(). Khi bạn chỉ sử dụng các hàm vào/ra trong thư viện stdio, trình liên kết yêu cầu có khai báo heap, nhưng các hàm này không hề sử dụng heap, do đó bạn có thể đặt nó bằng 0.
Như bình thường, bạn phải cho tôi biết cấu hình của chip mà bạn muốn, cùng với tốc độ baud, cổng USART mà bạn muốn dùng. Khi đó tôi mới có thể dịch ra một cái bootloader phù hợp với nhu cầu sử dụng của bạn.
Để đỡ mất thời gian, các bạn có thể cấu hình config bằng cách sửa ngay trong chương trình nạp luôn. Như thế sẽ nhanh hơn. Tuy nhiên nếu dùng các dao động tần số khác nhau hay cách đặt cổng Uart kết nối khác nhau thi buộc phải edit lại code.
Thạch anh 7.xxx tại Hà Nội có hàng Mai Khanh có bán đó, vậy là thuân lơi rồi.
Mọi người nếu có công việc liên quan tới PIC thì nên tìm hiểu dspic. Nếu đã từng làm PIC rồi thì nói hơi quá nhưng một ngày bạn có thể tiếp cận được với PIC ở mức độ làm chủ phần MCU.
Trong trường hợp bạn không thành công thì có thể dùng tập tin .hex dưới đây, dùng với bộ dao động nội của dsPIC (xấp xỉ 7.37 MHz, như tôi đã thông báo ở post đầu tiên), UART1, tốc độ baud 115200, và PLLx16. Các word cấu hình khác tương tự như của Claudiu Chiculita.
Cho em hoi: UART1 của dsPic30f4013 có thêm một cặp chân mở rộng là U1ATX, U1ARX vậy file boot của anh sử dụng cặp chân bình thường (U1RX,U1TX) hay cặp chân mở rộng trên ạ?
Em đang sử dụng MPLAB C30 bản Full để viết cho 30f4013 khi select device là 30f4013 thì không chạy(vẫn dịch ra file .hex được) nhưng chọn thiết bị là 30f4011 thì lại Ok. Có phải C30 nó bị lỗi không ạ?
Cho em hoi: UART1 của dsPic30f4013 có thêm một cặp chân mở rộng là U1ATX, U1ARX vậy file boot của anh sử dụng cặp chân bình thường (U1RX,U1TX) hay cặp chân mở rộng trên ạ?
Em đang sử dụng MPLAB C30 bản Full để viết cho 30f4013 khi select device là 30f4013 thì không chạy(vẫn dịch ra file .hex được) nhưng chọn thiết bị là 30f4011 thì lại Ok. Có phải C30 nó bị lỗi không ạ?
Tôi sử dụng cặp chân bình thường (U1TX và U1RX).
Tôi cho rằng C30 không có lỗi, bạn hỏi rất chung chung như thế thì khó mà trả lời cho chính xác được. Tôi chỉ có thể khuyên bạn một cách rất chung chung là kiểm tra phần cứng, các từ cấu hình, và chương trình của bạn.
CONFIG OSC = HS, OSCS = OFF
CONFIG PWRT = ON, BOR = ON, BORV = 27
CONFIG WDT = OFF, WDTPS = 128
CONFIG STVR = ON, LVP = OFF, DEBUG = OFF
Tập tin .hex được đính kèm phía dưới. Bootloader này làm việc với thạch anh ngoài 40 MHz (tôi khuyên không nên dùng thạch anh ở tần số này, vì chip sẽ khá nóng), tốc độ baud là 38400. Bạn thử xem có chạy tốt không nhé, vì tôi không có thạch anh 40 MHz để thử.
Thân,
Làm sao phải dùng thạch anh 40Mhz hả anh ?
Con 18F458 nếu muốn dùng 40Mhz --> 10MIPS chỉ cần cắm con thạch anh 10Mhz rồi config là:
LIST P=18F458 ; change also: Configure->SelectDevice from Mplab
xtal EQU 40000000 ; you may want to change: _XT_OSC_1H _HS_OSC_1H _HSPLL_OSC_1H
baud EQU 115200 ; standard TinyBld baud rates: 115200 or 19200
Comment