Một số thắc mắc về GPIO và TIMER của TM4C123GH6PM

phandinhkhanh1995

Thành Viên PIF
sau vài ngiên cứu và xem bài giảng nhóm em có một số thắc mắc trong ví dụ mẫu của D.I.D mong được sự giúp đỡ của anh chị ak :
Về GPIO :
Câu 1: ví dụ : SysCtlPeripheralEnable(uint32_t ui32perpheral) --> uint32_t và ui32peripheral là gì ak?
GPIOPinTypeGPIOGPIOOutput(uint32_t ui32port, uint8_t ui8pins) --> uint32_t va ui32port là gì ak ? em nghĩ là 32 bit nhưng ko biet nó có ý nghĩa gi?
câu 2: Trong các hàm cấu hình thì :
ví dụ như muốn cấu hình cho một chân là output thì :
gồm các hàm này(trong code mẫu): SysCtlPeripheralEnable()
GPIOPinTypeGPIOOutput()
GPIOPinWrite()
trong cấu hinh input thì(trong co de mẫu ):
SysCtlPeripheralEnable()
GPIODirModeSet()
em thấy trong này nếu ta thay GPIODirModeSet() bằng GPIOPinTypeGPIOinput() có được không ak ! và tại sao hàm chế độ output lại không có : GPIODirModeSet()
Câu 3: trong code mẫu về ngăt :
trong hàm phục vụ ngắt :
void ButtonISR(void)
{
static int tick = LED_RED;
GPIOIntClear(GPIO_PORTF_BASE,SW1);
GPIOPinWrite(GPIO_PORTF_BASE,LED_RED|LED_GREEN|LED_BLUE,tick);
tick <<=1;
if(tick>GPIO_PIN_3)
tick= LED_RED;
SysCtlDelay(SysCtlClockGet()/3);
}
--> ý nghĩa của delay ở đó là sao ak , nếu đặt vị trí khác có sao không ?
Câu 4: cũng trong code mẫu về ngắt : thì ngắt tại sao lại là dùng hàm ngắt toàn cục mak không phỉ là ngắt cục bộ ?
Câu 5: hàm #include<stdbool.h> và #include<stdint.h> và #include"driverlib/sysctl.h"
mục đích của các hàm này để làm gì ak ?
Phần Timer:
trong ngắt của GPIO thì : gồm có : kiểu ngắt , đăng kí ngắt , cho phép ngắt
GPIOIntypeSet()
GPIOIntRegister()
GPIOIntEnable()
IntEnalbe()
IntMasterEnable()
còn trong timer : chỉ có cho phép ngắt sao không có dăng kí ngắt và kiểu ngắt
IntEnable()
TimerIntEnable()
IntMasterEnable()
Câu 6: trong video bài giảng về PWM thì anh chị nói rõ giùm em về tạo vùng trễ(Dead-band) với ak!
Em cám ơn!:D
 

ctcngh

Thành Viên PIF
Câu 1: ví dụ : SysCtlPeripheralEnable(uint32_t ui32perpheral) --> uint32_t và ui32peripheral là gì ak?
GPIOPinTypeGPIOGPIOOutput(uint32_t ui32port, uint8_t ui8pins) --> uint32_t va ui32port là gì ak ? em nghĩ là 32 bit nhưng ko biet nó có ý nghĩa gi?
* ui32perpheral: là những hằng đã được định nghĩa tương ứng cho từng ngoại vi. Xem thêm trong file Sysctl.h (uint32_t là 1 kiểu đã đc định nghĩa trong stdint.h, tương ứng với số nguyên k dấu 32bit - unsigned long)
* Tương tụ. ui32port và ui8pin ta cần khai báo tương ứng các hằng đã đc định nghĩa tương ứng với port nào, vd: GPIO_PORTA_BASE.
ui8pins tương ứng với pin nào vd, GPIO_PIN_1) Các hằng này khai báo trong gpio.h.
 

ctcngh

Thành Viên PIF
câu 2: Trong các hàm cấu hình thì :
ví dụ như muốn cấu hình cho một chân là output thì :
gồm các hàm này(trong code mẫu): SysCtlPeripheralEnable()
GPIOPinTypeGPIOOutput()
GPIOPinWrite()
trong cấu hinh input thì(trong co de mẫu ):
SysCtlPeripheralEnable()
GPIODirModeSet()
em thấy trong này nếu ta thay GPIODirModeSet() bằng GPIOPinTypeGPIOinput() có được không ak ! và tại sao hàm chế độ output lại không có :GPIODirModeSet()
Xem bên này nha
http://www.payitforward.edu.vn/forum/threads/2007/
 

ctcngh

Thành Viên PIF
Câu 3: trong code mẫu về ngăt :
trong hàm phục vụ ngắt :
void ButtonISR(void)
{
static int tick = LED_RED;
GPIOIntClear(GPIO_PORTF_BASE,SW1);
GPIOPinWrite(GPIO_PORTF_BASE,LED_RED|LED_GREEN|LED_BLUE,tick);
tick <<=1;
if(tick>GPIO_PIN_3)
tick= LED_RED;
SysCtlDelay(SysCtlClockGet()/3);
}
--> ý nghĩa của delay ở đó là sao ak , nếu đặt vị trí khác có sao không ?
Nút nhấn trên kit dễ bị rung phím. Nên nếu k có delay thì vừa thực hiện xong chương trình ngắt ra, gặp rung phím thế là ngắt tiếp nên kết quả không đúng, giống như nhấn 2,3 lần.
Để ở cuối để khi nhấn là thực hiện xuất led liền, sau đó delay . Nếu delay ở đầu, mà quá lâu thì thấy kết quả không tức thời.
 

ctcngh

Thành Viên PIF
Câu 4: cũng trong code mẫu về ngắt : thì ngắt tại sao lại là dùng hàm ngắt toàn cục mak không phỉ là ngắt cục bộ ?
Trong ví dụ thì đã cho phép ngắt cục bộ module, và cả ngắt toàn cục
 

ctcngh

Thành Viên PIF
Câu 5: hàm #include<stdbool.h> và #include<stdint.h> và #include"driverlib/sysctl.h"
mục đích của các hàm này để làm gì ak ?
Trong C nói chung thì cú pháp #include để thêm phần code, thường là các file header. Ở đây chứa các định nghĩa, các header của các hàm thư viện,....
 

kieutriet

Thành Viên PIF
Các bạn không hiểu chỗ nào cứ tích cực hỏi giống bạn này nhé, sẽ có người giải đáp hết cho các bạn :)
 

phandinhkhanh1995

Thành Viên PIF
cho em hỏi là : trong việc truyền dữ liệu SPI thì ssiclk và ssiFss ssiRx ssiTx là gì ak và ý nghĩa của việc lấy mẫu ở lần chuyển trạng thái , tại em xem video bài giảng SPI mak không hiểu gì cả? em cám ơn !
 

kieutriet

Thành Viên PIF
SSIFss khi ở mức thấp thì quá trình truyền nhận dữ liệu mới xảy ra, khi kết nối một master với nhiều ngoại vi (slave) thì ngoại vi ứng với chân nào của master được tích cực thấp thì dữ liệu sẽ được truyền đến ngoại vi đó. (Tín hiệu này là cái tín hiệu chọn chip SS trong bài giảng đó em)
SSIClk là xung clock, dùng để đồng bộ quá trình truyền nhận. (Còn cái này là tín hiệu SCLK)
SSIRx là chân để nhận dữ liệu (receive). SSITx là chân để truyền dữ liệu (transmit).
SSIClk mỗi một chu kì sẽ có 2 lần chuyển trạng thái, từ thấp lên cao và ngược lại, việc em muốn lấy mẫu ở lần chuyển trạng thái nào phụ thuộc vào việc làm sao cho cái lúc em lấy mẫu ngay giữa cái bit em truyền, tránh sai lạc dữ liệu.
Thằng nào làm clip đó mà fail quá vậy :brick:
 

phandinhkhanh1995

Thành Viên PIF
tks anh,em hiểu rồi ,,a cho em hỏi ngĩa của từ FiFo là gì vậy ak ? và MSB , LSB , Q trong SSIRx và SSITx @@
 

kieutriet

Thành Viên PIF
FIFO là First In First Out, nghĩa là cái nào đưa vào trước sẽ lấy ra trước, FIFO trong SPI là một bộ nhớ đệm 8 ô 16bit, dữ liệu được đưa vào bộ đệm đó để chờ trước khi được nhận hoặc gửi đi.
MSB là Most Significant Bit, tức là bit có trọng số lớn nhất trong một byte, thông thường là bit 7
LSB là Least blah blah blah, tức là bit có trọng số nhỏ nhất trong byte, thường là bit 0
Q nghĩa là không xác định, em có thể cho qua :)
 
Top