Tiếp tục với hàm khởi tạo chip ở bài trước trong chuỗi bài lập trình enc28j60, ở bài này chúng ta sẽ cấu hình và khởi tạo cho các thanh ghi thuộc nhóm PHY
Thông tin về các PHY Registers nằm ở phần 3.3datasheet
Các thanh ghi thuộc PHY đều là loại 16bit và không thể trực tiếp truy cập qua giao tiếp SPI, các truy cập vào PHY đều gián tiếp thông qua các thanh ghi được gọi là MII
READING PHY REGISTERS
Để đọc 1 thanh ghi PHY
Ghi địa chỉ của thanh ghi đó vào thanh ghi MIREGADR
Set bit MICMD.MIIRD để bắt đầu thao đac đọc, bit MISTAT.BUSY (bit báo bận) sẽ được set
Đợi 10.24uS, thăm dò bit MISTAT.BUSY để chắc chắn hoạt động đọc hoàn thành
Khi hoàn thành, bit MISTAT.BUSY sẽ tự xóa, chúng ta xóa thủ công bit MICMD.MIIRD và lấy giá trị mong muốn từ thanh ghi MIRDL và MIRDH
WRITING PHY REGISTERS
Để ghi 1 thanh PHY
Ghi địa chỉ của thanh ghi đó vào thanh ghi MIREGADR
Ghi giá trị 8bit thấp vào MIWRL
Ghi giá trị 8bit cao vào MIWRH
Ngay sau đó MISTAT.BUSY tự động được set
Sau khoảng 10.24uS, quá trình ghi hoàn tất, bit bận sẽ tự xóa
Khá đơn giản phải không. Viết 2 hàm ghi và đọc PHY thôi nào
Nếu có bất kì thắc mắc nào trong bài viết, vui lòng để lại comment dưới mỗi bài ! Mình sẽ không trả lời thắc mắc của các bạn ở facebook hay email !
Nếu trong phần code bạn nhìn thấy nhưng thứ kiểu như & thì đó là lỗi hiển thị, cụ thể 3 kí tự < > & bị biến đổi thành như thế
& là &
< là <
> là >
DIY,chế cháo, viết blog chia sẽ kiến thức về lập trình,điện tử - IoT.
Rất mong được giao lưu, kết bạn với các bạn cùng đam mê.
Địa chỉ Facebook: https://www.facebook.com/nguyendao207
2 bình luận
Cảm ơn vì bài hướng dẫn của anh, em có một vài thắc mắc mong anh giải đáp.
1. #define MICMD (0x12|0x40|0x80) //thanh ghi nay thuoc bank 2 nen OR 0x40
Anh | 0x80 có mục đích gì vậy anh?
2. #define PHLCON_STRCH 0x0002 … #define PHLCON_LACFG3 0x0800
của thanh ghi PHLCON em có xem qua datasheet nhưng không biết được địa chỉ của mấy thằng này PHLCON_STRCH, PHLCON_LACFG3… anh xem nó ở đây vậy ạ?
3. anh có thể giải thích thêm về đoạn này được không ạ
//**********Advanced Initialisations************//
cảm ơn anh!
1. Mình có giải thích rồi mà
2. Trong datasheet nó có địa chỉ LOW và HIGH của các thanh ghi đó, địa chỉ LOW đứng trước địa chỉ HIGH, mình chỉ cần lấy địa chỉ LOW là sẽ biết địa chỉ HIGH thôi. Không cần mất công định nghĩa 2 cái
Cảm ơn vì bài hướng dẫn của anh, em có một vài thắc mắc mong anh giải đáp.
1. #define MICMD (0x12|0x40|0x80) //thanh ghi nay thuoc bank 2 nen OR 0x40
Anh | 0x80 có mục đích gì vậy anh?
2. #define PHLCON_STRCH 0x0002 … #define PHLCON_LACFG3 0x0800
của thanh ghi PHLCON em có xem qua datasheet nhưng không biết được địa chỉ của mấy thằng này PHLCON_STRCH, PHLCON_LACFG3… anh xem nó ở đây vậy ạ?
3. anh có thể giải thích thêm về đoạn này được không ạ
//**********Advanced Initialisations************//
cảm ơn anh!
1. Mình có giải thích rồi mà
2. Trong datasheet nó có địa chỉ LOW và HIGH của các thanh ghi đó, địa chỉ LOW đứng trước địa chỉ HIGH, mình chỉ cần lấy địa chỉ LOW là sẽ biết địa chỉ HIGH thôi. Không cần mất công định nghĩa 2 cái