BAÙo caùO ĐỒ Án tin học tổng quan VI xử LÝ lpc2378



tải về 336.68 Kb.
trang2/3
Chuyển đổi dữ liệu15.08.2016
Kích336.68 Kb.
#20348
1   2   3

Nguyên lý hoạt động

Sơ đồ khối :



Nhìn vào đây ta có thể thấy 1 cách tổng quát hoạt động của timer:

Đầu tiên clock PCLK đưa vào Prescale Counter (thanh ghi này sẽ điều khiển việc chia clock PCLK) cụ thể là mỗi PCLK vào thì thanh ghi Prescale Counter sẽ tăng lên 1, nó tăng lên đến khi nào bằng giá trị trong thanh ghi Precale Register thì thanh ghi TC sẽ tăng lên 1. Thanh ghi TC cứ tăng lên như thế cho đến khi nào bằng với giá trị trong thanh ghi MRn thì sẽ sinh ra 1 interrupt.

Ngoài ra thì còn có thanh ghi TCR (để điều khiển có cho timer chạy hay không)

Và các thanh ghi Capter Register để load giá trị thanh ghi TC vào khi cần thiết.

7.3 Làm thế nào để thiết lập cho timer hoạt động.


  1. Thiết lập mode (timer or counter) :

Ghi giá trị thích hợp lên thanh ghi TnCTCR (tham khảo trang 471 user manual)

Bit 1 :0 là để thiết lập conter/timer mode

Bit 3 :2 Thiết lập chân input cho timer (chỉ được sử dung trong counter mode)

Lưu ý: Nếu thiết lập mode này cho timer nào thì 3 bit của nó trong thanh ghi TnCCR phải được lập trình là 0.

Bit 7:4 Không sử dụng (Lưu ý: cái nào không sử dụng cho nó bằng 0 hết)


  1. Thiết lập thời gian hay số sự kiện để xảy ra 1 lần interrupt

Thiết lập thời gian sinh ra interrupt hay số sự kiện sinh ra interrupt

  • Ta sẽ ghi giá trị vào thanh ghi MR0 nếu ta dung timer0, MR1 nếu dung timer1 … (Cứ sau mỗi khoảng thời gian hay số sự kiện này sẽ sinh ra 1 interrupt)

  • Ghi giá trị vào thanh ghi TMCR, đây là thanh ghi điều khiển việc sinh ra interrupt.(Reset hay Stop TC) (Tham khảo trang 473)

Nếu ở trên ta chọn Counter mode thì phải thiết lập giá trị cho thanh ghi TnCCR. Đây là thanh ghi điều khiển, nó sẽ chọn cạnh lên hay cạnh xuống hay cả hai xảy ra ở chân input được coi là 1 sự kiện. Hay nói cách khác 1 sự kiện là 1 sự thay đổi ở ngõ vào input. (Xem chi tiết ở trang 475)

Ngoài ra ở chế độ counter mode có 4 thanh ghi CR0-3 (mỗi thanh ghi đước nối với 1 chân) Khi sự kiện xảy ra ở chân này thì nó sẽ load giá trị của thanh ghi TC vào.





CHƯƠNG 8. UART

8.1 Giới thiệu

Trước hết UART là gì: Universal Asynchronous Receiver Transmitter

Dùng để truyền và nhận dữ liệu nối tiếp. LPC2378 hỗ trợ 4 bộ truyền nhận nối tiếp UART0, UART1, UART2 và UART3 (truyền nhận 16 byte với cơ chế FIFO). Tiếp theo chúng ta sẽ xem xét đến phần kiến trúc của UART

Kiến trúc :



  • Mọi sự truyền nhận thông tin giữa CPU và UART đều thông qua APB

  • Việc nhận tín hiệu của UART : thông qua chân RXD và đi vào thanh ghi dịch (UnRSR) sau đó dữ liệu sẽ được chuyển qua thanh ghi chứa dữ liệu (UART RX Buffer Register FIFO) và dữ liệu sẽ ở đây chờ CPU tới đọc.

  • Việc truyền tín hiệu của UART : cũng tương tự như thế, CPU truyền dữ liệu vào trong buffer ở trong thanh ghi UnTHR (UART TX Holding Register FIFO), sau đó dữ liệu từ thanh ghi này được chuyển sang thanh ghi dịch (UnTSR) và từ từ truyền ra ngoài thông qua chân TXD

  • Về tốc độ truyền dữ liệu UART cho phép cho thiết lập tốc độ baud thông qua các thanh ghi. Và ta phải tự tìm ra tốc độ baud nào hợp lý nhất (tức xác suất lỗi trên đường truyền ít nhất) Vấn đề này sẽ được thảo luận trong phần sau.

  • Các sự thiết lập interrupt ở trong thanh ghi UnIER và UnIIR

  • Thông tin từ việc truyền nhận (2 chân TX và RX) được lưu trong thanh ghi UnLSR.

  • Thông tin điều khiển nằm ở trong thanh ghi UnLCR

Sơ đồ khối của UART

UART giao tiếp với bên ngoài qua 2 chân TXD và RXD (mũi tên màu đỏ ở trên hình)



Nhìn vào sơ đồ khối ta có thể thấy UART gồm có 4 bộ chính :

  • Bộ Interrupt : điều khiển việc interrupt, lưu trữ status và khi nào có interrupt sẽ đẩy ra chân UnINTR

  • Bộ điều khiển Clock UnBRG điều khiển việc sinh ra CLK từ 2 dữ liệu vào là UnDLL và UnDLM

  • Bộ truyền dữ liệu : UnTX có 2 thanh ghi : thanh ghi chứa dữ liệu và thanh ghi truyền serial ra ngoài thông qua chân TXD

  • Bộ nhận dữ liệu : UnRX gồm có 2 thanh ghi là thanh ghi chứa dữ liệu và thanh ghi truyền serial. Dữ liệu nhận vào ở chân RXD sẽ đẩy vào thanh ghi truyền serial rồi đưa vào thanh ghi nhận dữ liệu.

Phần trên là sơ lược khái niệm về UART, bây giờ ta bắt đầu vào tìm hiểu các thanh ghi của UART, cách thiết lập các thanh ghi để UART hoạt động.

8.2 Các loại thanh ghi UART

(tham khảo trang 330 user manual)

  • UnRBR (UART Receiver Buffer Register) là thanh ghi chỉ đọc (read only, chứa 8 bit data) chứa thong tin cũ nhất có thể được đọc bới CPU. Để truy xuất được vào thanh ghi này thì bit DLAB trong thanh ghi LCR phải là 0



  • UnTHR (UART Transmit Holding Register) cũng tương tự thanh ghi UnRBR nhưng nó dùng để truyền dữ liệu nên nó sẽ là thanh ghi chứa dữ liệu mới nhất được truyền. UnTHR là thanh ghi chỉ ghi (write only, 8 bit data) DLAB phải là 0 khi ta truy xuất vào thanh ghi này.



  • UnIER (UART Interrupt Enable Register) được sử dụng để kích hoạt 3 interrupt (RBR interrupt, THRE interrupt, RX Line Status Interrupt) và cho phép auto-baud rate và time out. Chi tiết tham khảo trang 333



  • UnIIR (UART Interrupt Identification Register) cung cấp cho chúng ta đó là interrupt gì và độ ưu tiên của nó như thế nào. Như có interrupt đang đợi không? Interrupt đó là gì? Có chế độ auto-baud không? Đã kết thúc chưa? Có bị time out không? … (Tham khảo trang 334)

  • Về độ ưu tiên interrupt thì có 3 độ ưu tiên:

      • Receive Line Status (RLS) (ưu tiên cao nhất)

      • Receive Data available (RDA) (ưu tiên mức 2)

      • Character Time out Indicator (CTI) (ưu tiên mức 2)

      • THRE interrupt

  • UnFCR (UART FIFO Control Register) thanh ghi điều khiển



  • UnLCR (UART Line Control Register) Thiết lập các định dạng để truyền và nhận



  • UnLSR (UART Line Status Register) chứa thong tin về việc truyền nhận (lỗi, thanh ghi chứa dữ liệu đang rỗng …)

  • Và còn vài thanh ghi cho các mục đích khác

8.3 Khởi động UART

  • Để khởi động cho UART đầu tiên ta phải thiết lập chân TXD và RXD cho nó

  • UART0 (có chân TXD0 là P0.2 và RXD0 là P0.3)

  • UART1 (có chân TXD1 là P0.15 và RXD1 là P0.16)

  • UART2 (có chân TXD2 là P0.2 và RXD2 là P0.3)

  • UART3 (có chân TXD3 là P0.0 hay P4.28 và RXD3 là P0.1 hay P4.29)

Như ta đã biết 1 chân có thể có nhiều chức năng và muốn nó làm chức năng gì ta phải thiết

lập cho nó thông qua thanh ghi PINSEL (chi tiết tham khảo trang 115)

VD : ta thiết lập cho UART0 thì dùng câu lệnh sau :

PINSEL0 |= 0x00000050; /* RxD0 and TxD0 */

PINSEL0 &= ~0xA0;


  • Tiếp theo thiết lập thanh ghi điều khiển UnLCR (để tạo format cho việc truyền nhận) (Như có sử dụng Parity checking không? Sử dụng bao nhiêu bit Stop bit …)

  • Set tốc độ baud

  • Các thanh ghi dùng để set tốc độ baud: UnACR, UnFDR,UnDLL, UnDLM

UnACR để thiết lập mode (Có 2 mode: mode 0 và mode 1), khởi động auto baud, kết thúc auto baud

  • Mode 0: Baud rate được tính toán dựa trên 2 cạnh xuống của chân RX (1 cạnh xuống là của Start bit và 1 cạnh xuống là của tín hiệu dữ liệu)



  • Mode 1: Baud rate được tính toán giữa cạnh xuống và cạnh lên của Start bit (nó chính là độ dài của Start bit)



  • Auto baud có thể sinh ra 2 interupt: UnIIR ABTOInt interrupt (khi counter overflow) và UnABEOInt interrupt khi mà auto baud thành công

Baud rate phải nằm trong khoảng này

Công thức để tính tốc độ baud:

Giá trị đo lường trước sự sinh ra baud rate

MULVAL, DIVADDVAL chứa trong thanh ghi UnFDR

Công thức tính tốc độ baud:

Mặc dù có công thức để tính nhưng tốc độ baud vẫn không phải là tốc độ truyền sinh ra ít lỗi nhất. Bây giờ ta sẽ xem xét 1 giải thuật tính toán để sinh ra được baud rate hợp lý nhất.



Sơ đồ flow chart





  • Cài đặt hàm interrupt:

Xem lại phần thiết lập các interrupt để biết rõ hơn

  • Công việc cuối cùng là kích hoạt cho UART bắt đầu hoạt động:

VD: cho UART0

#define IER_RBR 0x01

#define IER_THRE 0x02

#define IER_RLS 0x04

U0IER = IER_RBR | IER_THRE | IER_RLS;


  • Gửi dữ liệu:

  • Kiểm tra cờ cho phép gửi nếu cho phép thì đưa 1 byte dữ liệu vào thanh ghi UnTHR, tắt cờ cho phép gửi.

  • Khi nào gửi xong thì cờ sẽ tự động bật lên (trong làm interrupt)

  • Tiếp tục gửi cho đến khi hết dữ liệu

  • Nhận dữ liệu: Được thực hiện luôn trong hàm interrupt

  • Kiểm tra thanh ghi UnLSR, nếu bit 0 Receive Data Ready RDR là 1 tức là đang có dữ liệu

  • Đọc thanh UnRBR để lấy dữ liệu (Khi ta đọc thanh ghi này thì cờ interrupt trong UnLSR tự động bị xóa đi)

VD khởi động UART0



CHƯƠNG 9. I2C

9.1. Giới thiệu.

  • I2C là giao thức để kết nối với các thiết bị bên ngoài, như LCD, bộ nhớ ngoài, ...

  • Giao tiếp chuẩn I2C, có thể thiết lập ở chế độ Master, Slave hay Master/Slave.

  • Cơ chế trọng tài, cho phép truyền nhận dữ liệu liên tục mà không bị gián đoạn dữ liệu.

  • Xung có thể thay đổi phù hợp với tốc độ truyền.

  • Truyền nhận 2 chiều giữa Master và Slave.

  • Đồng bộ bằng xung tuần tự cho phép nhiều thiết bị với tốc độ truyền nhận khác nhau giao tiếp trên cùng một kênh.

9.2 Nguyên lý hoạt động của I2C

Có 2 loại dữ liệu được chấp nhận trên kênh truyền I2C.

* Dữ liệu được gửi từ Master đến Slave. Byte đầu tiên là địa chỉ của Slave. Sau đó là chuỗi byte dữ liệu cần truyền. Slave cần gửi trả về ACK đối với mỗi byte đã nhận.

* Dữ liệu gửi từ Slave đến Master. Slave nhận byte đầu tiên, cũng là địa chỉ của Slave, được gửi bởi Master. Slave trả về ACK. Sau đó Salve gửi chuỗi byte dữ liệu cần truyền. Master cần gửi trả về ACK đối với mỗi byte đã nhận, ngoại trừ byte dữ liệu cuối cùng. Sau khi nhận tất cả các byte dữ liệu, Master sẽ gửi NACK. Master cũng là thiết bị tạo ra tất cả các xung đồng bộ và tín hiệu START / STOP. Trước khi tín hiệu START (cũng là tín hiệu bắt đầu của một quá trình chuyển dữ liệu tuầu tự khác), kênh truyền I2C sẽ vẫn được tích cực.

Giao thức I2C hướng đến byte, và hoạt động ở 4 chế độ : Master truyền, Master nhận, Slave truyền và Slave nhận. LPC2300 có 3 giao tiếp I2C, riêng bộ I2C[0] có thể điều khiển tắt thiết bị LPC2300 mà không ảnh hưởng đến các thiết bị còn lại trên kênh truyền.

9.3 Kết nối vật lý





9.4 Sơ đồ khối của I2C.



9.4.1 Bộ lọc ngõ vào và điều chỉnh ngõ ra.

_ Những tín hiệu ở ngõ vào được đồng bộ với xung nội bộ, và các gai tín hiệu ngắn hơn 3 xung đồng hồ sẽ được loại bỏ.

_ Ngõ ra cho I2C cũng được thiết kế đặc biệt để đáp ứng đặc tả của I2C.

9.4.2 Thanh ghi địa chỉ I2ADDR

Thanh ghi này sẽ chứa 7 bit địa chỉ và được dùng trong trường hợp thiết bị là Slave (truyền hay nhận). Bit cuối cùng (LSB) được dùng để nhận dạng lời gọi địa chỉ chung (0x00).



9.4.3 Bộ so sánh.

Bộ so sánh sẽ phát hiện và yêu cầu ngắt khi 7 bits địa chỉ Slave trùng với địa chỉ Slave của chính nó (7 bits cao trong thanh ghi I2ADR). Bộ so sánh cũng phát hiện trường hợp byte nhận đầu tiên là lời gọi địa chỉ tổng quát (0x00). Khi có yêu cầu ngắt, các bit trạng thái cũng được gán giá trị.



9.4.4 Thanh ghi dịch I2DAT.

Thanh ghi 8 bits này chứa một byte dữ liệu cần truyền hay vừa nhận được. Dữ liệu trong I2DAT luôn dịch từ phải sang trái (bit MSB được dịch đầu tiên). Thanh ghi I2DAT luôn chứa giá trị byte cuối cùng xuất hiện trên kênh truyền.



9.4.5 Xung đồng bộ.



9.4.6 Bộ tạo xung tuần tự,

Bộ tạo xung này hoạt động khi thiết bị đóng vai trò Master, và được tắt khi thiết bị đóng vai trò Slave. Tần số và tỉ lệ xung tích cực có thể lập trình thông qua việc gán giá trị cho 2 thanh ghi là I2CSCLL và I2CSCLH.



9.4.7 Điều khiển và định thời.

Bộ điều khiển/ định thời có chức năng tạo ra xung để dịch thanh ghi I2DAT, kích khởi bộ so sánh, tạo ra hay phát hiện tín hiệu START/ STOP, nhận và truyền bit ACK, điều khiển chế độ Master hay Slave, phát hiện những điều kiện để yêu cầu ngắt và theo dõi tình trạng của kênh truyền I2C.



9.4.8 Thanh ghi điều khiển I2CONSET và I2CONCLR

Các thanh ghi này chứa những bit mà giá trị của chúng quyết định chức năng của các khối I2C, bắt đầu, khởi tạo hay kết thúc việc truyền tín hiệu tuần tự. Các thanh ghi này cũng quyết định tốc độ truyền, phát hiện địa chỉ và tín hiện ACK.



9.5 Những thanh ghi quan trọng.



9.6 Các chế độ hoạt động của I2C

9.6.1 Master truyền.

Khi đó Master ở chế độ truyền và Slave ở chế độ nhận. Thanh ghi I2CONSET phải được thiết lập như sau. I2EN phải được gán = 1 để kích hoạt chức năng I2C. Nếu bit AA = 0 thì giao tiếp I2C sẽ nhận ra bất cứ địa chỉ nào nếu có một thiết bị khác đang là Master trên kênh truyền.



Trong chế độ này, bit R/W nên là 0, tức là “ghi”. Byte đầu tiên gửi đi chứ địa chỉ của thiết bị nhận (7 bit) và bit R/W quyết định chiều của dữ liệu. Giao tiếp I2C sẽ khởi động vào chế độ Master truyền khi chương trình phần mềm gán STA = 1. Giao tiếp I2C sẽ gửi tín hiệu START khi kênh truyền rãnh. Sau khi START được truyền, bit SI sẽ được gán = 1, và giá trị của thanh ghi I2STAT là 0x08. Byte gồm địa chỉ của Slave và bit R/W được truyền vào thanh ghi I2DAT, sau đó bit SI được xoá = 0. Bit SI được xoá bằng cách gán 1 vào bit SIC trong thanh ghi I2CONCLR.

Sau khi truyền byte chứa địa chỉ Slave và bit R/W, và ACK được trả về, bit SI lại được gán = 1, thanh ghi I2STAT lúc này có thể mang giá trị 0x18, 0x20 hay 0x38 (ở chế độ Master); 0x66, 0x78 hay 0xB0 (ở chế độ Slave).



9.6.2 Master nhận.

Ở chế độ này, dữ liệu được Slave gửi về. Quá trình truyền nhận tương tự ở chế độ Master truyền. Tuy nhiên, bit R/W được gán = 1, tức là “đọc”. Khi địa chỉ của Slave và bit R/W được gửi, ACK sẽ được trả về, bit SI lại được gán = 1, thanh ghi I2STAT lúc này có thể mang giá trị 0x40, 0x48 hay 0x38 (ở chế độ Master); 0x68, 0x78 hay 0xB0 (ở chế độ Slave).



Nếu tín hiệu START được khởi tạo một lần nữa, giao tiếp I2C của LPC2300 có thể trở về chế độ Master truyền.





9.6.3 Chế độ Slave nhận

Dữ liệu sẽ được gửi từ Master đến, để thiết lập chế độ này, thanh ghi I2ADR và I2CONSET phải được thiết lập như sau:



Sau khi các thanh ghi I2ADR và I2CONSET được thiết lập, giao tiếp I2C sẽ chờ đến khi nó được gán địa chỉ. Nếu bit R/W là 0, giao tiếp này là Slave nhận, ngược lại, nó sẽ trở thành Slave truyền. Sau khi byte chứa địa chỉ Slave và bit R/W được nhận, SI được gán = 1 và I2STAT được xác lập. Thanh ghi này có thể đọc để nhận giá trị thể hiện tình trạng của kênh truyền.





9.6.4 Chế độ Slave truyền.

Ở chế độ này, bit R/W có giá trị 1. Phần cứng sẽ tự động nhận dạng địa chỉ của chính nó. Khi địa chỉ này được phát hiện, một ngắt sẽ được yêu cầu. Nếu vi xử lý yêu cầu vào chế độ Master thì phải chờ cho đến khi kênh truyền rãnh. Và nếu cơ chế trọng tài bị mất đi thì giao tiếp I2C lập tức chuyển thành chế độ Slave.







9.7 Một số ví dụ

9.7.1 Tinh chỉnh tần số và tỉ lệ xung tích cực.

Tần số của kênh I2C được xác định bởi công thức.



Giả sử fPCLK = 20 MHz, sau các lệnh định nghĩ hằng, ta sẽ có tần số của kênh truyền là 125 KHz, tỉ lệ xung tích cực là 60%.

#define I2SCLH_SCLH 0x00000060 /* I2C SCL Duty Cycle High Reg */

#define I2SCLL_SCLL 0x00000040 /* I2C SCL Duty Cycle Low Reg */

Một số ví dụ khác để tính toán tần số kênh truyền



9.7.2 Định nghĩ chân tín hiệu.

Để sử dụng được giao tiếp I2C, ta phải định nghĩ các chân tín hiệu như sau. Ở đây áp dụng cho chân PIO0.27 và PIO0.28 trở thành I2C0 (SDA and SCK).

PINSEL1 &= ~0x03C00000;

PINSEL1 |= 0x01400000;



9.7.3 Khởi động I2C.

DWORD I2CInit( DWORD I2cMode )

{

PCONP |= (1 << 19);



PINSEL1 &= ~0x03C00000;

PINSEL1 |= 0x01400000;

/*--- Clear flags ---*/

I20CONCLR = I2CONCLR_AAC | I2CONCLR_SIC | I2CONCLR_STAC | I2CONCLR_I2ENC;

/*--- Reset registers ---*/

I20SCLL = I2SCLL_SCLL;

I20SCLH = I2SCLH_SCLH;

if ( I2cMode == I2CSLAVE )

{

I20ADR = LM75_ADDR;



}

/* Install interrupt handler */

if ( install_irq( I2C0_INT, (void *)I2C0MasterHandler, HIGHEST_PRIORITY ) == FALSE )

{

return( FALSE );



}

I20CONSET = I2CONSET_I2EN;

return( TRUE );

}

Phần phụ lục



Điều khiển Led

Trên board MCB2300 gồm có 8 con led nhỏ: Ở chân 16 ..23

Muốn sử dụng nó thì trước hét ta phải set chức năng cho các chân đó là output, rồi reset các giá trị nó về 0. Ở đây ta định nghĩa 2 hàm, 1 hàm bật led, 1 hàm tắt led



Điều khiển màn hình LCD

Việc điều khiển LCD khá phức tạp, nhưng npx đã xây dựng sẵn cho ta các hàm hỗ trợ để có thể xuất ra LCD 1 cách dễ dàng. Có thể down trên trang nxp hay copy trong cd (đính kèm) file lcdport.h và lcdport.c. Xem thêm ví dụ về chương trình chạy đồng hồ hiển thị LCD trong cd đính kèm.



  • K
    VD: LCD_puts(“Do an mon hoc”)

    hi muốn xuất 1 chuỗi ra LCD thì chỉ cần gọi hàm LCD_puts(char *s);



L
VD: LCD_gotoxy(1,2); // di chuyển đến hàng 2 cột 3 (do

chỉ số ở đây bắt đầu bằng 0)



CD trên board được phân ra làm 2 hàng, và 16 cột muốn di chuyển thì ta sử dụng hàm LCD_gotoxy(int x,int y);

Tập lệnh ARM7

I. ARM (Advanced RISC Machine)

ARM được phát triển tại Acron Computer Limited tại Cambridge England từ năm 1983 đến 1985.

Risc Acrchitecture: Berkeley đã cho ra 1 tập lệnh thu gọn cho kiến trúc máy tính gọi là Bekeley RISC 1. Đặc điểm của nó là:


  • Câu lệnh cố định là 32 bit

  • Load-Store là những lệnh xử lý dữ liệu trên thanh ghi và nó được phân biệt với truy xuất vào bộ nhớ

  • Câu lệnh 3 địa chỉ

Programmer’s model

ARM processor có cấu trúc là 32 bit nhưng nhân của ARM hiện thực theo 2 tập lệnh khác nhau:


  • 32 bit ARM instruction set

  • 16 bit Thumb instruction set

Kiểu dữ liệu: cung cấp 6 kiểu dữ liệu

  • 8 bit có dấu và không dấu

  • 16 bit có dấu và không dấu

  • 32 bit có dấu và không dấu

ARM có tổng cộng 37 thanh ghi tất cả có chiều dài 32 bits

  • 1 chứa trạng thái lập trình hiện tại

  • 5 chứa trạng thái lập trình được save

  • 31 thanh ghi được sử dụng cho mục đích chung khác

ARM có 7 mode hoạt động: Ở mỗi mode đều có thể thấy các thanh ghi từ r0 – r15. Ngoài ra tùy từng mode mà thấy thêm được 1 số thanh ghi khác.

CPSR: thanh ghi chứa trạng thái lập trình hiện tại



Condition code flag (chỉ sử trong chế độ ARM state)

N : Negative result form ALU

Z: Zero result from ALU (cờ zero)

C: ALU Operation carried out (cờ nhớ)

V: ALU operation overflowed (cờ tràn)

Interrupt disable bits

I = 1 disable IRQ

F =1 disable FIQ

T bit : chuyển trạng thái giữa ARM standard (câu lệnh 32 bit) và Thumb (câu lệnh 16 bit)

T = 0: ARM state

T = 1: Thumb state

Mode bit (5 bit) : có tất cả 7 mode



II. ARM Thumb


  • Câu lệnh 16 bit tiết kiệm 35-40% bộ nhớ so với câu lệnh 32 bit

  • Mục đích giảm giá thành sản phẩm nhưng tăng thời gian xử lý. Vì phải qua quá trình giải mã câu lệnh 16 bit thành 32 bit

  • Rất nhiều Thumb được xử lý lệnh sử dụng format 2 địa chỉ

  • Phần lớn lệnh Thumb được thực thi không có trường điều kiện (N,C,Z,V)

  • Sử dụng T bit (bit thứ 5 của CPSR) với câu lệnh BX để thay đổi (ARM standard và ARM Thumb)

Thum instruction được đặt trong pipeline, nó giải mã câu lệnh 16 bit thành 32 bit rồi đưa vào instruction decoder và data bus



Ví dụ:


Add Rd, # Constant



Lower register: được sử dụng là thanh ghi trực tiếp, có toàn quyền truy xuất vào các thanh ghi này.

Higher register:


  • R8-R12 chỉ được truy xuât thông qua 1 số câu lệnh của assembler cụ thể là : MOV, ADD, BX, CMP dụng thông qua câu lệnh của assembler (như ADD, Compare, Mov)

  • SP, LR và PC : bị hạn chế truy xuất

CPSR: chỉ có thể truy xuất gián tiếp

SPSR: không cho phép truy xuất



Có 6 mod sử dụng: Ở từng mod có thể sử dụng được các thanh ghi như trên hình vẽ, và mod nào có thêm banked register thì chỉ khi ở mod đó mới có thể sử dụng thêm thanh ghi đó.

19 Format sử dụng trong ARM Thumb

Chú thích:

Rd: destination register

Rs: source register

Rn: Register

Op: Opcode (ghi mã lệnh)

Offset: Immediate value

L : Load/Store Flag (0: Lưu vào bộ nhớ, 1: Load từ bộ nhớ)

B: Byte or Word flag (0: truyền theo word, 1: truyền theo byte)

S: sign extention flag (0: không dấu, 1: có dấu)

H: low/high offset bit (0: offset low, 1: offset high)


  1. Move shifted register (LSL (shift trái),RSL (shift phải),ASL (shift đại số) )

VD: LSL R1,R2,#4 dịch trái R2 4 bit rồi lưu vào R1

  1. Add/sub (ADD, SUB)

VD: Add R1,R2,R3 => R1 = R2+R3

  1. Move/compare/add/subtract immediate (MOV, CMP, ADD, SUB)

VD: MOV R0, #128 => R0 = 128

  1. ALU operation : có 16 lệnh khác nhau như bảng dưới




  1. Hi register operations/ branch exchange:

Để vào ARM mode thì xóa bit Rs, còn để vào Thumb mode thì set bị Rs



  1. Load/store với register offset (LDR, LDRB, STR, STRB)

VD: STR R1, [R2,R3] => lưu giá trị chứa trong R1 vào ô nhớ (R2+R3)



  1. Load/Stored sign-extended byte/ halfword (LDSB, LDSH, LDRH, STRH)



  1. Load/Stored với immediate offset (LDR, LDRB, STR, STRB)



  1. Load/Stored halfword (LDRH, STRH)



  1. SP-relative load / Store (LDR, STR)



  1. Load Address




0 : PC

1 : SP





  1. Add offset to Stack Pointer



  1. Push/pop

VD: STMDB R13!,{R0-R1} => Add R0 và R1 vào stack



  1. Multiple load/store (LDMIA, STMIA)

VD: STMIA R13!, {R0-R1} => lưu trữ R0, R1 vào bộ nhớ bắt đầu từ địa chỉ chứa trong R13



  1. Lệnh rẽ nhánh có điều kiện

BEQ, BNE, BCS, BCC, BMI,BPL, BVS, BHI, BLS, BGE, BLT, BGT, BLE



Каталог: nonghocbucket -> UploadDocument server07 id190496 229274
UploadDocument server07 id190496 229274 -> Báo cáo thực tập tốt nghiệp LỜi mở ĐẦU
UploadDocument server07 id190496 229274 -> I. objectives
UploadDocument server07 id190496 229274 -> Kieåm tra hoïc kì I moân: hoùa hoïc khoái 11 (2011-2012) Thôøi gian 45’ ÑEÀ 1 Caâu 1
UploadDocument server07 id190496 229274 -> Chuyên đề: VI sinh vậT Ứng dụng trong xử LÝ phế thải I. Nguồn gốC phế thảI 1/ Phế thải là gì ?
UploadDocument server07 id190496 229274 -> Ngaøy soaïn : Ngaøy daïy : I
UploadDocument server07 id190496 229274 -> Noäi dung cô baûn cuûa cuoäc Duy taân Minh Trò Về chính trị
UploadDocument server07 id190496 229274 -> Giáo án sử 8 Tuần: 12 Ngày soạn: 06/11/2011
UploadDocument server07 id190496 229274 -> 200 câu hỏi về môi trường (Phần 4) (03-07-2096 15: 37)
UploadDocument server07 id190496 229274 -> 1. Cn b ng c¸c ph­¬ng tr×nh ph¶n øng sau
UploadDocument server07 id190496 229274 -> TỔ HÓa trưỜng thpt lê quý ĐÔn tam kỳ CÂu hỏI Ôn tập hoá chưƠng đIỆn ly. LỚP 11

tải về 336.68 Kb.

Chia sẻ với bạn bè của bạn:
1   2   3




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương