Tên:…………………………………………………………………………………………….. MSSV:……………………………………………….. Trang
Giảng viên ra đề:
Người phê duyệt:
THI CUỐI K
Học kỳ/năm học
1
2023-2024
Ngày thi
Môn học
Lập Trình Hệ Thống Nhúng
Mã môn học
EE 3031
Thi lưng
80 phút
Mã đ
01
Ghi chú: - Thí sinh được sử dụng tài liệu.
Câu 1. (10 đ) Một thanh ghi MYREGISTER ở địa chỉ 0x4000 0001. Viết macro định nghĩa thanh ghi và viết
lệnh ghi giá trị 0x01020304 vào thanh ghi này
#de 昀椀 ne MYREGISTER
……………………………………………………………………………………….
………………………………………………………………………………………………………………….
Câu 2. (10 đ) Ngoại vi GPIOA được định nghĩa như sau:
typedef struct
{
__IO uint32_t CRL;
__IO uint32_t CRH;
__IO uint32_t IDR;
__IO uint32_t ODR;
__IO uint32_t BSRR;
__IO uint32_t BRR;
__IO uint32_t LCKR;
} GPIO_TypeDef;
#define PERIPH_BASE 0x40000000UL
#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000UL)
#define GPIOA_BASE (APB2PERIPH_BASE + 0x00000800UL)
#define GPIOA ((GPIO_TypeDef *)GPIOA_BASE)
a) Điền địa chỉ các thanh ghi vào bảng sau:
CRL
…………………………………………………
CRH
…………………………………………………
IDR
…………………………………………………
ODR
…………………………………………………
BSRR
…………………………………………………
BRR
…………………………………………………
LCKR
…………………………………………………
Tên:…………………………………………………………………………………………….. MSSV:……………………………………………….. Trang
b) Viết các lệnh để đưa giá trị 0x12345678 vào thanh ghi ODR của PORTA bằng 2cách: sử dụng con trỏ
GPIOA như đã định nghĩa ở trên và sử dụng trực ếp địa chỉ đã nh như ở câu a
(dùng con trỏ GPIOA)
…………………………………………………………
…………………………………………………………
…………………………………………………………
…………………………………………………………
…………………………………………………………
…………………………………………………………
(Dùng trực ếp địa chỉ đã nh)
…………………………………………………………
…………………………………………………………
…………………………………………………………
…………………………………………………………
…………………………………………………………
…………………………………………………………
Câu 3. (40đ) Một bộ điều khiển máy phát điện có 1 ngõ vào GRID_STATUS báo hiệu điện lưới còn hay mất, một
ngõ ra GEN_CONTROL điều khiển máy phát.
i) Khi mất điện lưới liên tục trong vòng 1 phút, bộ điều khiển sẽ bật máy phát.
ii) Khi máy phát đang bật mà điện lưới có lại, bộ điều khiển sẽ kiểm tra xem điện lưới có liên tục trong
vòng 2 phút rồi mới tắt y phát.
a) (10đ) Vẽ máy trạng thái cho hoạt động của hệ thống. Giải thích chi ết ý nghĩa các trạng thái, các sự kin
để chuyển trạng thái và các ngõ ra.
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
Tên:…………………………………………………………………………………………….. MSSV:……………………………………………….. Trang
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
b) (10 pts) Viết khai báo cho biến state chứa trạng thái biến mer_count chứa số đếm của soware mer
dùng trong chương trình trong 2 module state.h và state.c. Biến mer_count là biến toàn cục được khai
báo trong state.c và truy cập trong module stm32f1xx_it.c. Biến state chđược truy cập trong module
state.c và không truy cập được trong các module khác.
//state.h
typedef enum
{.............................................................................................
..............................................................................................
..............................................................................................
} state_t;
…………………………………………………………………… 琀椀
mer_count;
//state.c
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
c) (20 pts) Viết hàm void state_machine_update(void) để cập nhật máy trạng thái trong module state.c
trình phục v ngắt void SysTick_Handler(void) để cập nhật số đếm mer trong module stm32f1xx_it.c.
Giả sử SysTick mer được khởi động để tạo ngắt sau mỗi 1 ms. Cho trước các hàm sau:
int32_t is_grid_on(void)
Bằng 1 nếu có điện lưới, ngược lại bằng 0
void SysTick_Handler(void) {
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
}
void state_machine_update(void) {
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
void
status)
gen_control(int
Nếu status =1, bật máy phát, nếu status = 0, tắt máy phát
Tên:…………………………………………………………………………………………….. MSSV:……………………………………………….. Trang
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
}

Preview text:

Tên:…………………………………………………………………………………………….. MSSV:……………………………………………….. Trang LCKR
…………………………………………………
Giảng viên ra đề: Người phê duyệt: THI CUỐI KỲ
Học kỳ/năm học 1 2023-2024 Ngày thi Môn học
Lập Trình Hệ Thống Nhúng
Mã môn học EE 3031
TRƯỜNG ĐH BÁCH KHOA – ĐHQG-HCM
Thời lượng 80 phút Mã đề 01
KHOA ĐIỆN – ĐIỆN TỬ
Ghi chú: - Thí sinh được sử dụng tài liệu.
Câu 1. (10 đ) Một thanh ghi MYREGISTER ở địa chỉ 0x4000 0001. Viết macro định nghĩa thanh ghi và viết
lệnh ghi giá trị 0x01020304 vào thanh ghi này #de 昀椀 ne MYREGISTER
……………………………………………………………………………………….
………………………………………………………………………………………………………………….
Câu 2. (10 đ) Ngoại vi GPIOA được định nghĩa như sau: typedef struct { __IO uint32_t CRL; __IO uint32_t CRH; __IO uint32_t IDR; __IO uint32_t ODR; __IO uint32_t BSRR; __IO uint32_t BRR; __IO uint32_t LCKR; } GPIO_TypeDef;
#define PERIPH_BASE 0x40000000UL
#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000UL)
#define GPIOA_BASE (APB2PERIPH_BASE + 0x00000800UL)
#define GPIOA ((GPIO_TypeDef *)GPIOA_BASE)
a) Điền địa chỉ các thanh ghi vào bảng sau: CRL
………………………………………………… CRH
………………………………………………… IDR
………………………………………………… ODR
………………………………………………… BSRR
………………………………………………… BRR
…………………………………………………
Tên:…………………………………………………………………………………………….. MSSV:……………………………………………….. Trang
b) Viết các lệnh để đưa giá trị 0x12345678 vào thanh ghi ODR của PORTA bằng 2cách: sử dụng con trỏ
GPIOA như đã định nghĩa ở trên và sử dụng trực tiếp địa chỉ đã tính như ở câu a (dùng con trỏ GPIOA)
(Dùng trực tiếp địa chỉ đã tính)
…………………………………………………………
…………………………………………………………
…………………………………………………………
…………………………………………………………
…………………………………………………………
…………………………………………………………
…………………………………………………………
…………………………………………………………
…………………………………………………………
…………………………………………………………
…………………………………………………………
…………………………………………………………
Câu 3. (40đ) Một bộ điều khiển máy phát điện có 1 ngõ vào GRID_STATUS báo hiệu điện lưới còn hay mất, một
ngõ ra GEN_CONTROL điều khiển máy phát. i)
Khi mất điện lưới liên tục trong vòng 1 phút, bộ điều khiển sẽ bật máy phát. ii)
Khi máy phát đang bật mà điện lưới có lại, bộ điều khiển sẽ kiểm tra xem điện lưới có liên tục trong
vòng 2 phút rồi mới tắt máy phát.
a) (10đ) Vẽ máy trạng thái cho hoạt động của hệ thống. Giải thích chi tiết ý nghĩa các trạng thái, các sự kiện
để chuyển trạng thái và các ngõ ra.
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
Tên:…………………………………………………………………………………………….. MSSV:……………………………………………….. Trang void gen_control(int
Nếu status =1, bật máy phát, nếu status = 0, tắt máy phát status)
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
....................................................................................................................................
b) (10 pts) Viết khai báo cho biến state chứa trạng thái và biến timer_count chứa số đếm của software timer
dùng trong chương trình trong 2 module state.h và state.c. Biến timer_count là biến toàn cục được khai
báo trong state.c và truy cập trong module stm32f1xx_it.c. Biến state chỉ được truy cập trong module
state.c và không truy cập được trong các module khác. //state.h //state.c typedef enum
…………………………………………………………………………………………
{............................................................................................. …………………………………………………………………………………………
.............................................................................................. …………………………………………………………………………………………
.............................................................................................. ………………………………………………………………………………………… } state_t;
…………………………………………………………………………………………
…………………………………………………………………… 琀 椀
………………………………………………………………………………………… mer_count;
c) (20 pts) Viết hàm void state_machine_update(void) để cập nhật máy trạng thái trong module state.c và
trình phục vụ ngắt void SysTick_Handler(void) để cập nhật số đếm timer trong module stm32f1xx_it.c.
Giả sử SysTick timer được khởi động để tạo ngắt sau mỗi 1 ms. Cho trước các hàm sau: int32_t is_grid_on(void)
Bằng 1 nếu có điện lưới, ngược lại bằng 0 void SysTick_Handler(void) {
……………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………… }
void state_machine_update(void) {
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
Tên:…………………………………………………………………………………………….. MSSV:……………………………………………….. Trang
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
……………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………… }