Vấn đề giao tiếp ngoại vi của LPC922: Khai báo cổng xuất nhập

Sau khi Power On và chân Reset không ở mức thấp khi bật nguồn, Port 0 và Port 1[1] có các thông số như sau: (Quy định như trong uV3, ta viết tiền tố 0x thay cho hậu tố H khi nói về số Hexadecimal)

P0M1:              0xFF

P0M2:              0x00

PT0AD:           0x00

P1M1:              0xFF

P1M2:              0x00

P3M1:              0x03

P3M2:              0x00

Chú ý tới Datasheet của LPC922, ta sẽ thấy các chế độ hoạt động của các cổng In/Out được khai báo như bảng dưới đây:

PxM1.y

PxM2.y

Port output mode

0

0

Quasi-bidirectional

0

1

Push-Pull

1

0

Input Only (High Impedance)

1

1

Open Drain

Ta xem lại các chức năng của mỗi chân MCU P89LPC922 trong User manual:

Port pin

Cấu hình

Các chức năng khác

Ghi chú thêm

PxM0

PxM1

P0.1

P0M1.1

P0M2.1

KBI1,CIN2B

Refer to section "Port 0 analog functions" for usage as analog inputs (CIN2B, CIN2A, CIN1B, CIN1A and CMPREF)

P0.2

P0M1.2

P0M2.2

KBI2,CIN2A

P0.3

P0M1.3

P0M2.3

KBI3,CIN1B

P0.4

P0M1.4

P0M2.4

KBI4,CIN1A

P0.5

P0M1.5

P0M2.5

KBI5,CMPREF

P0.6

P0M1.6

P0M2.6

KBI6,CMP1

 

P0.7

P0M1.7

P0M2.7

KBI7,T1

 

P1.0

P1M1.0

P1M2.0

TxD

 

P1.1

P1M1.1

P1M2.1

RxD

 

P1.2

P1M1.2

P1M2.2

T0,SCL

input-only or open-drain

P1.3

P1M1.3

P1M2.3

INT0,SDA

input-only or open-drain

P1.4

P1M1.4

P1M2.4

INT1

 

P1.5

not configurable

RST

Input only. Usage as general purpose input or RST is determined by User Configuration Bit RPD (UCFG1.6).

Always a reset input during a power-on sequence.

P1.6

P1M1.6

P1M2.6

 

 

P1.7

P1M1.7

P1M2.7

 

 

P3.0

P3M1.0

P3M2.0

XTAL2,CLKOUT

 

P3.1

P3M1.1

P3M2.1

XTAL1

 

 

Các giới hạn trên khi hoạt động ở cần lưu ý: (Xem thêm Datasheet ở các trang 34,35,36,37)

-Trên mỗi chân (Pin) tích cực mức cao (I0H)max=8mA.

-Trên mỗi chân (Pin) tích cực mức thấp (I0L)max=20mA.

-Mức tối đa trên toàn chip: (I0total)max=80mA

-Mức áp giới hạn trên mỗi chân MCU: Vn=-0.5÷5.5V.

-Công suất tối đa trên cả chip khi chưa dùng thêm tản nhiệt: 1.5W

Lời khuyên: Nên cách li các chân I/O của MCU với các phát triển ứng dụng, có thể dùng thêm mạch đệm, cổng đảo, TST kéo nguồn, MOSFET ...

Số chân tối đa ta có thể sử dụng tùy các mục đích trong từng trường hợp:[2]

Nguồn xung nhịp

Reset option

Số chân

Dao động RC trên chip hoặc dao động Watchdog

No external reset (except during power-up)

18

External RST pin supported[3]

17

Nguồn xung ngoài

No external reset (except during power-up)

17

External RST pin supported

16

Dùng dao động thạch anh, gốm...

No external reset (except during power-up)

16

External RST pin supported

15

Ví dụ khai báo các chân cho IO: (Dùng C và ASM)

VD: Khai báo chân P0.0 làm chân IO, P0.1 làm chân Input, P0.2 Output chế độ Push-pull (đẩy kéo), P0.3 chế độ Open Drain (cực máng hở).

//C language:

void ports_init (void):

{

  P0M1 &= 0xFA;
  P0M1 |= 0x0A;
  P0M2 &= 0xFC;
  P0M2 |= 0x0C;

}

//giá trị P0M1=xxxx1010B, P0M2=xxxx1100B

;ASM

;//Begin

PORTS_INIT:

CLR                   P0M1.0

CLR                   P0M2.0

SETB                 P0M1.1

CLR                   P0M2.1

CLR                   P0M1.2

SETB                 P0M2.2

SETB                 P0M1.3

SETB                 P0M2.3

;End//

     Các phần khác như khai báo để sử dụng làm chức năng I2C, Watchdog Timer, Comparator, Keypad,... nếu có thời gian, tôi sẽ bổ sung sau.

 


 

[1] Xem các quy định về kí hiệu Port của LPC922 trong tập tin Reg922.h, khuyên bạn nên dùng ngôn ngữ  C để lập trình, chỉ đơn giản #include<reg922.h>, nếu vẫn dùng ASM, tùy trình biên dịch bạn đang sứ dụng, phải có thay đổi hay khai báo phù hợp.

[2] Hai chân Vdd và Vss là bắt buột.

[3] Chỉ có trong quá trình Power On, chân Reset mới có tác dụng, mà như thế thì tôi không thấy ứng dụng nhiều ở đây, trong những điều kiện mà chúng ta thường bật nguồn để khởi động thiết bị và ít khi nào không sử dụng MCU mà bật nguồn rồi dùng chân RST để giữ MCU sẵn sàng, khi mà MCU đã hỗ trợ thêm các chức năng như Power Down, Idle,.. Có lẽ ứng dụng của việc hoạch định phần cứng này để hoạt động trong một dây chuyền mà thiết bị điều khiển trước không được cách ly với MCU LPC922.

[Lên đầu trang]

 

 

© 2005 Bùi Trung Hiếu (http://www.khvt.com) Cập nhật lần cuối vào lúc 08:50:58 SA ngày 29 tháng tám 2005