2024/12/17 3

SSD1306 코드분석

uint8_t SSD1306_Init (void) { if (HAL_I2C_IsDeviceReady(&H_I2C, SSD1306_I2C_ADDR, 1, 20000) != HAL_OK) { >/* Send slave address */ hi2c->Instance->DR = I2C_7BIT_ADD_WRITE(DevAddress); deAddress > DR DR 쪽에 값을 넣어주면 그 후부터는 Hardware가 처리 I2C_HandleTypeDef hi2c2;{ I2C_TypeDef *Instance;}typedef struct{ __IO uint32_t CR1; __IO uint32_t CR2; __IO uint32_t OAR1; __IO uint32_t OAR2; __IO uint32_t DR; __IO..

TCB - Task , CS

Kernel Level의 Context Switching  현재의 Context잘 보전 > 다른 곳에 갔다 와서 하던 일 계속 진행 가능!       ARM의 Context > 그림1 >  이 녀석만 잘 저장해두면됨  > 해당 Task의 Stack에 저장  Context Switching 할때 , 현재의 Context를 저장해 두는 방법   >  Kernel이 어떻게 Task를 관리할까? System상의 Task : 자기 자신만의 Stack과 TCB (Task Control Block)가짐       TCB :  각 Task를 Control하기 위해 > Task의 정보를 저장해 놓는 Data Structure               > Scheduling과 Context Switching을 위한 정보들..

I2C hello world :)

SM (standard mode ) : 비율 1대 1 FM (fast Mode )             a > 1 : 2            b > 1 : 1.7  SCL clock frequencySM : 0~ 100KHZFM : 0~ 400KHZ Tlow : FM : 1.3 us ~     > duty cycle LOW,HIGH 비율 1:2 ,1 : 1.7 // SM : 1대1 400kHZ = 2.5us 1초에 400kHZ , 1주기 ( LOW + HIGH) : 2.5us > 한쪽당 1.25us>>NXP I2C 메뉴얼에 .. LOW 를 최소 1.3us 유지해야함>HIGH : LOW1 : 2 > 0.8 + 1.7 = 2.51 : 1.7 > 0.9 + 1.6 = 2.5 strech mode ; 클럭 LO..