You are on page 1of 6

Requirement:

Using the KIT S32K144, the LED blinking effect can be created with a frequency of 40,000,000 ticks,
which corresponds to a 1-second cycle. Two push buttons, SW2 and SW3, are utilized.

SW2 is used to cycle through the LED effects: Green -> Red -> Blue -> Green -> ...

SW3 is used to turn off all three LEDs.


PORT CONTROL AND INTERRUPT

Cấu hình cho PORTD để sử dụng cho LED.

Các bước cấu hình cho PORTD:

B1: enable clock for PORTD

PCC-> PCCn[PCC_PORTD_INDEX] = PCC_PCCn_CGC_MASK;

PCC-Peripheral Clock Controller

PCCn[PCC_PORTD_INDEX] thì với PCC_PORTD_INDEX là chỉ số đại diện cho chỉ số của PORTD trong
thanh ghi PCC. Và chỉ số này là 76

Vì offset của PCC_PORTD là 130h tính từ vị trí bắt đầu của thanh ghi PCC. Vì kích thước của 1 đối tượng
trong thanh ghi PCC là 4 byte nên chỉ số tương ứng của thanh ghi PCC_PORTD sẽ là:

0x130 / 4 = 76 (hệ Dec)

PCC_PCCn_CGC_MASK

CGC(Clock Gate Control)


B2: Config Port Data Direction Register for PORTD is Output

PTD->PDDR |= 1<<16; /* Port D0: Data Direction= output */

Cấu hình cho PortD để sử dụng cho chân GPIO (General-Purpose Input/Output) dùng cho Green Led
bằng cách dịch trái 16 bit để enable chân số 16 tương ứng với Green Led

Tương ứng như vậy sẽ dịch trái 15 bits tương ứng với RED LED và 0 bits tương ứng với LED BLUE.

B3: Config MUX cho PORTD

PORTD->PCR[16] |= PORT_PCR_MUX(1); /* Port D0: MUX = ALT1, GPIO (to blue LED on EVB) */

Cấu hình chế độ đa chức năng (multiplexing) cho chân GPIO 16 trên PORTD
Câu lệnh trên có ý nghĩa là thực hiện phép toán bitwise OR giữa giá trị hiện tại của thanh ghi PCR[16] và
giá trị cấu hình mới được tạo ra bởi PORT_PCR_MUX(1) ( với Alternative 1 dùng cho chân GPIO)

Tại đây PORT_PCR_MUX_MASK được define với giá trị tương ứng là 0x700 được biểu diễn tương ứng
trong hệ nhị phân là 011100000000, điều này tương ứng với 3 bit của trường MUX trong thanh ghi PCR,
các bít này đại diện cho các tùy chọn chức năng của chân GPIO.

Macro PORT_PCR_MUX_SHIFT được định nghĩa với giá trị 8u( 8 với kiểu unsigned) tương ứng với số
lượng bit cần dịch trái để định vị trường MUX trong thanh ghi PCR.

Ví dụ với tham số của trường MUX là 1.

Đầu tiên giá trị x sẽ được chuyển đổi thành kiểu uint32_t(32-bit unsigned integer) bằng phần ((uint32)
(x)).

Sau đó giá trị này sẽ dịch trái << 8bit để tương ứng với trường MUX trong thanh ghi PCR. -> 0x100

Tiếp theo kết quả của phép dịch trái sẽ dùng toán tử bitwise AND để lấy 3 bit tương ứng của trường
MUX

/*Enable Clock for PORTC to use Button*/

PCC-> PCCn[PCC_PORTC_INDEX] = PCC_PCCn_CGC_MASK;

PTC->PDDR &= ~ (1<<12);

Lấy đảo của ~(1<<12) mục đích để bit thứ 12 của thanh ghi PDDR là không, chỉ định rằng chân GPIO 12 là
chân đầu vào.

WDOG-WATCHDOG

void WDOG_disable (void)

WDOG->CNT=0xD928C520; /* Unlock watchdog */ mở khóa watchdog bằng cách gán gí trị


0xD928C520 vào thanh ghi CNT(chỉ ghi 1 lần)

WDOG->TOVAL=0x0000FFFF; /* Maximum timeout value */ Đặt timeout tối đa của watchdog là


65535 chu kỳ đếm bằng cách gán giá trị 0x0000FFFF vào thanh ghi TOVAL

WDOG->CS = 0x00002100; /* Disable watchdog */Vô hiệu hóa watch bằng cách gán giá trị
0X00002100 vào thanh ghi CS

}
Trước khi vào main phải vô hiệu hóa watchdog bởi vì:

- Tránh reset không mong muốn: đảm bảo hệ thống không bị treo khi có lỗi xảy ra và có thể tự
động khởi động lại trong trường hợp xảy ra lỗi (trong trường hợp hệ thống không được cập nhật
đúng thời gian). Bằng cách tắt watchdog trước khi thực hiện các tác vụ cấu hình khác, ta đảm
bảo rằng hệ thống không bị reset không mong muốn trong quá trình khởi tạo.

UART – S32K144 LPUART Block

Dữ liệu truyền đi được


đẩy vào TX_Buffer
thông qua thanh ghi D

Khối test dữ liệu, dữ


liệu ra được nhận lại
luôn ở trên chân RxD

Khối enable interrupt


for TDRE, TIE, TC, TCIE
Dùng chung bộ tạo
baudrate với khối truyền

Bộ phát hiện sườn

You might also like