MXX_GPRS.mak(mcu\make)
Option.mak(mcu\make)
프로젝트마다 동일한 플랫폼에 대해 서로 다른 기능 구성이 있습니다. 구동 디버깅의 경우 일부 매크로 스위치 컨트롤을 수정하고 추가해야 합니다.
기본 형식 및 절차:
MXX_GPRS.mak:
XXX_XXX = XXX
XXX_XXX = 없음
XXX_XXX = 참
XXX_XXX = FALSE
Option.mak:
Ifdef XXX_XXX
Ifneq ($(strip $( XXX_XXX)), FALSE)
COM_DEFS += XXX_XXX
엔디프
엔디프
코드에서 XXX_XXX 를 사용하여 관련 코드를 제어합니다.
# 정의된 경우 (XXX_XXX)
//여기에 코드 추가
#endif
Custominfo.pl(mcu\tools)
이 파일은 LCD, image_sensor 등의 모듈을 추가할 때 수정해야 하는 파일입니다. Mcu\custom\drv 에서 ADS 컴파일 시스템을 이 모듈로 컴파일할 수 있습니다.
Image_sensor 를 참조할 수 있습니다.
If (($ projectne "basic") & & amp ($ projectne "l1s)) & & amp 정의됨 ($ $cmos_sensor)) {
If ($cmos_sensor ne "NONE") {
Push(@thatdirs, "drv \ \ image _ sensor \ \ $ CMOS _ sensor));
}
}
2.LCM 백라이트; 진동기
SUNRISE_0255_LCM 을 예로 들어 보겠습니다.
단계 1:
LCD_MODULE 및 main _ LCD _ size 는 MXX_GPRS.mak 에 구성되어 있습니다.
LCD _ 모듈 = SUNRISE_0255_LCM
메인 _ LCD _ size = 240x320
다음을 Option.mak 에 추가합니다.
Com _ defs _ for _ sunrise _ 0255 _ LCM = sunrise _ 0255 _ LCM hx8312 color _ lcdtff
여기서 HX83 12 는 LCD 의 모델입니다.
COLOR_LCD, TFT_MAINLCD 및 QVGA_MAINLCD 는 LCD 의 유형입니다.
Qvga _ 메인 LCD: 240x320
QCIF_MAINLCD: 176X220
Qqvga _ main LCD:120x160
예를 들어, SUNRISE_0255_LCM 을 기반으로 호환 화면을 추가합니다. 그런 다음 HX83 12 다음에 LCD 모델을 차례로 추가합니다.
하위 LCD; 가 있는 경우 순서대로 DUAL _ LCD 를 추가해야합니다. COLOR_SUBLCD 및 모델 이름 :
2 단계:
Mcu\custom\drv\LCD 디렉토리에 SUNRISE_0255_LCM 모듈을 추가합니다. 디렉토리 이름은 SUNRISE_0255_LCM 으로 지정됩니다.
다른 LCM; 을 참조할 수 있습니다. 5 개의 파일 추가 및 수정:
Lcd.c
Lcd_hw.h
Lcd_sw.h
평면 패널 모니터 _ 소프트웨어 _ 회사
Lcd _ SW _ rnd.h.
Lcd.c: Lcd 를 구현하는 드라이버 인터페이스입니다.
보통 init; 가 있습니다. 늦잠을 자다 노숙하다 블록 쓰기 등
Lcd_hw.h: 일반적으로 수정할 필요가 없습니다.
데이터 주소 구성 명령 주소 및 출력 형식
Lcd 의 너비와 높이를 구성하십시오.
Lcd_sw_rnd.h: 일반적으로 수정할 필요가 없습니다.
세 번째 단계:
백라이트 제어 코드 추가
Mcu \ 사용자 지정 \ drv \ misc _ drv \ 사용자 지정 _ 디바이스. c
Kal _ bool custom _ CFG _ gpio _ set _ level (kal _ uint8 gpio _ dev _ type, kal _ uint8 gpio \
{
//SUNRISE_0255_LCM 제어 코드를 사용합니다.
}
GPIO 모드 및 PWM 모드; (기본 기능은 PWM 모드입니다.)
GPIO 모드라면, 그런 다음 함수에 시뮬레이션 코드를 추가하십시오.
PWM 모드인 경우 : Mcu \ custom \ drv \ misc _ drv \ custom _ HW _ default.c 파일에서 PWM1_ level _ 을 적절하게 수정해야 합니다 주파수와 듀티 사이클,
또한 MCU \ plutoMMI \ MMI \ gpio \ gpiosrc \ general device interface.c 에는 자세한 백라이트 MMI 제어 코드가 있습니다.
또한 위의 인터페이스에 대한 lcd_if.c(mcu\drv\src) 호출에 익숙해야 합니다.
카메라 모듈; 센서
외부 DSP 에 대해서는 잠시 논의하지 않습니다. OV9650 을 예로 들어 보겠습니다.
단계 1:
ISP_SUPPORT 및 CMOS _ SENSOR 는 MXX_GPRS.mak 에서 구성됩니다.
ISP_SUPPORT = TRUE
CMOS_SENSOR = OV9650
카메라 픽셀 = 백만 픽셀
참고: (일반적으로 30 만 픽셀은 654.38+0 만 픽셀로 보간할 수 있습니다. 1.30,000 을 2 백만 픽셀로 보간할 수 있음)
2 단계:
Mcu\custom\drv\image_sensor 아래에 OV9650 디렉토리를 추가합니다.
파일을 추가하거나 수정하려면 다음과 같이 하십시오.
Camera _ hw.c: 모듈 전원 켜기/끄기 제어; (GPIO 할당은 하드웨어 리소스 할당 테이블에 따라 다름)
Camera _ para. c:ISP 및 센서 관련 레지스터 구성 실제 디버깅에서는 비교 효과가 수정됩니다.
Image_sensor.c: 타이밍; 센서 초기화 전원 켜기/끄기 미리 보기 캡처와 같은 인터페이스 구현
Image_sensor.h: 센서에 대한 일부 속성 설정 (일부 매크로 정의);
Camera_info.c: 일반적으로 수정할 필요가 없습니다.
모든 기능을 완료한 후 효과 디버깅 기반;
주요 도구: 메타; CCT 등
ISP 주소는 데이터 시트를 참조하십시오. MTK 플랫폼
세 번째 단계:
다음 디렉토리에 있는 파일에 대해 어느 정도 알아야 합니다!
미디어 \ 카메라 \;
미디어 \ 비디오 \;
Plutommi\mtkapp\Camera\
Plutommi\mtkapp\Video\
프루토미 \mtkapp\MDI\
특정 프로젝트에 대한 키보드 정의 및 매핑 및 기타 특수 처리 코드는 PHONE_TYPE 및 PLATFORM_NAME 조합에 의해 제어됩니다.
Phone _ type = slide 와 같은
PLATFORM_NAME = M678
코드 제어는 다음과 같습니다.
Custom \ drv \ misc _ drv \ m678 _ bb \ keypad _ def.c.
Constkeypad _ structkeypad _ custom _ def = {
#if defined(__PHONE_SLIDE__) // 슬라이드 모드
# 정의된 경우 (__SLIDE_M678)
//여기에 m678 키보드 정의 추가
//0 행 (첫 번째 열)
장치 키 XX,
......
//행 1 (두 번째 열)
......
//
......
# 그렇지 않으면
#endif
#elif defined(__PHONE_BAR__) // 직선 막대 모델
//
#elif defined(__PHONE_SPIN) // 회전 모드
//
# elif defined (_ _ phone _ clam 셸)//플립 모델
//
#endif
}
플랫폼에서 제공하는 기본 키 외에 특정 키 정의도 추가해야 하는 경우 위의 내용 외에도 다음 사항을 수정해야합니다.
Interface\hwdrv\kbd_table.h
장치 키 정의 xx : 순서에 주의하다
# 장치 키 XX 시퀀스 값 정의
Plutommi ₩ MMI ₩ framework ₩ OSL ₩ oslsrc ₩ keybrd.c.
장치 키 XX 가 특정 키라고 가정합니다.
//특정 키 정의
Constu16 presentallkeys [] =
{
키 _ 0,
키 _1,
키 _ 2,
키 _ 3,
키 _ 4,
키 _ 5,
......
//특정 키 정의
# 정의된 경우 (__SLIDE_M678)
, 키 _ xx
#endif
}
//키보드 매핑 (추가 순서는 PresentAllKeys[]) 과 일치해야 함)
정적 상수 KeyPadMap nKeyPadMap[] = {
{디바이스 _ 키 _0, 키 _0, 키 _ 타이머 _ID0, 톤 _ 이중 톤 다중 주파수 _0, 디바이스 _ 오디오 _ 재생 _ 무제한}
{디바이스 _ 키 _ 1, 키 _ 1, 키 _ 타이머 _ID 1, 음조 _ DTMF _/kr
......
......
//특정 키를 매핑합니다.
# 정의된 경우 (__SLIDE_M678)
{디바이스 _ 키 _XX, 키 _XX, 키 _ 타이머 _IDXX, 톤 _DTMF_ 1, 디바이스 _ 오디오 _ 재생 _ 무제한}
#endif
}
//타이머 id 정의 즉 KEY_TIMER_IDXX 입니다
Plutommi\mmi\Inc\TimerEvents.h
키 _ timer _ idxx 를 차례로 추가합니다
또한 drv \ src \ kbdmain.c 에서.
디더링 시간을 수정할 수 있습니다. 에서; 누르는 데 오랜 시간이 걸립니다. 특별한 요구를 충족시키기 위해 시간 및 기타 매개 변수를 반복하십시오.
헤드폰 감지; 선제어 운전 시스템
Custom \ drv \ misc _ drv \ m678 _ bb \ auxmain.c.
헤드폰 감지 일반적으로 AUX_EINT_NO (범용 플랫폼 기본값) 와 SENDKEY_ADC (auxmain.c 참조) 에만 관심을 가지면 됩니다.
하드웨어의 실제 상황에 따라 관련 조정을 할 수 있습니다.
회로 제어에 사용됩니다. 해당 REMOTE_EINT_NO, REMOTE_ADC 및 ADC 값을 누르기/해제하도록 구성해야 합니다.
구체적인 처리 절차는 플랫폼 _ _ line _ control _ 헤드폰 _ support _ _ control 의 코드를 참조하십시오.
6. 물리적 출력 코어
MT6226 플랫폼 ADC0-ADC6 에 사용 가능한 리소스 을 눌러 섹션을 인쇄할 수도 있습니다
선 제어를 예로 들어 수정 또는 추가 프로세스를 소개합니다.
Interface\hwdrv\Bmt.h
Typedef 열거 {
Vbat_adc_channel=0,
Visense_adc_channel,
Vbattmp_adc_channel,
......
# 정의된 경우 (__ LINE _ CONTROL _ 헤드폰 _ 지원 _ _)
원격 ADC 채널,
#endif
......
} ADC _ channel _ type
Custom \ drv \ misc _ drv \ m678 _ bb \ ADC _ channel.c.
# 정의된 경우 (__ LINE _ CONTROL _ 헤드폰 _ 지원 _ _)
Constkal _ uint8 ADC _ remote = 6; //하드웨어가 ADC6 에 연결되어 있다고 가정합니다.
#endif
Kal _ uint8 custom _ ADC _ get _ channel (ADC _ channel _ type 유형)
{
스위치 (유형)
{
......
# 정의된 경우 (__ LINE _ CONTROL _ 헤드폰 _ 지원 _ _)
사례 원격 _ ADC _ 채널:
Return ((kal _ uint8) ADC _ remote);
#endif
......
}
#endif
}
Custom \ drv \ misc _ drv \ m678 _ bb \ auxmain.c.
Voidaux _ task _ main (task _ entry _ struct * task _ entry _ ptr)
{
# 정의된 경우 (__ LINE _ CONTROL _ 헤드폰 _ 지원 _ _)
Kal _ uint8 remote _ ADC _ logic _ id
Kal_uint8 원격 _adc_no
#endif
......
......
//만들기
# 정의된 경우 (__ LINE _ CONTROL _ 헤드폰 _ 지원 _ _)
Remote _ ADC _ no = custom _ ADC _ get _ channel (remote _ ADC _ channel)
Remote _ ADC _ logic _ id = ADC _ sche _ create _ object (mod _ aux, remote_adc_no,
#endif
......
While( 1)
{
Receive _ msg _ ext _ q (task _ info _ g [task _ entry _ ptr-> Task_indx]. Task _ ext _ qid & amp;; Current _ ILM);
스위치 (current_ilm.msg_id)
{
......
//ADC 읽기
사례 메시지 _ ID _ 읽기 _ 모두 _ ADC _ 채널 _ 요청:
......
# 정의된 경우 (__ LINE _ CONTROL _ 헤드폰 _ 지원 _ _)
Aux _ read _ ADC _ channel (remote _ ADC _ logic _ id);
#endif
......
깨뜨리다
......
//제거
사례 메시지 _ ID _ BMT _ ADC _ measures _ 완료 _CONF:
......
# 정의된 경우 (__ LINE _ CONTROL _ 헤드폰 _ 지원 _ _)
Elseif (mea _ done _ ptr-> Adc _ sche _ id = = remote _ ADC _ logic _ id)
{
ADC _ measure _ count++;+;
Remote _ value = (kal _ int32) mea _ done _ ptr-> 볼트;
Aux _ remove _ ADC _ channel (remote _ ADC _ logic _ id);
}
#endif
......
}
}
}
조개 껍질에 의해 중단된 REGISTOR 는 위의 기능에 추가할 수 있다.
7.EINT
EINT 에 대한 설명은 플랫폼의 데이터 시트를 참조하십시오.
선 제어를 예로 들어 수정 또는 추가 프로세스를 소개합니다.
Interface\hwdrv\Eint.h:
Typedef 열거
{
......
# 정의된 경우 (__ LINE _ CONTROL _ 헤드폰 _ 지원 _ _)
원격 채널,
#endif
......
} eint _ channel _ type
Custom \ drv \ misc _ drv \ m678 _ bb \ eint _ def.c.
# 정의된 경우 (__ LINE _ CONTROL _ 헤드폰 _ 지원 _ _)
Constkal _ uint8 remote _ eint _ no = 3; //하드웨어 구성이 EINT3 이라고 가정합니다.
#endif
Kal _ uint8 custom _ eint _ get _ channel (eint _ channel _ type 유형)
{
스위치 (유형)
{
......
# 정의된 경우 (__ LINE _ CONTROL _ 헤드폰 _ 지원 _ _)
사례 원격 입력 채널:
Return ((kal _ uint8) remote _ eint _ no);
#endif
......
}
}
Custom \ drv \ misc _ drv \ m678 _ bb \ auxmain.c.
//인터럽트 처리기
HISR 외진 지역
{
If (remote_state) // 하이 레벨
{
//관련 처리 코드
}
Else// 하위 수준
{
//관련 처리 코드
}
}
//등록 중단
Voidaux _ task _ main (task _ entry _ struct * task _ entry _ ptr)
{
Kal _ uint8 remote _ eint _ no
......
# 정의된 경우 (__ LINE _ CONTROL _ 헤드폰 _ 지원 _ _)
Remote _ eint _ no = custom _ eint _ get _ channel (remote _ eint _ chann);
EINT_Registration (원격 _eint_no, KAL_TRUE, 원격 _state, 원격 _EINT_HISR, kal _ true
#endif
......
}
등록이 중단되면 다음 사항에 유의하십시오.
인터럽트 트리거 모드: 레벨 트리거/가장자리 트리거?
디더링: 사용/사용 안 함?
레벨 트리거가 높은 레벨에서 활성화되는지 낮은 레벨에서 활성화되는지 여부입니다.
Eint0-eint3 의 경우 : 디더링 시간을 수정할 수 있습니다. 다음 문서를 통해 Eint4-eint7 에는 점프 방지 메커니즘이 없습니다.
Custom \ drv \ misc _ drv \ m678 _ bb \ eint _ def.c.
Kal _ uint8 custom _ eint _ SW _ debounce _ time _ delay [eint _ max _ channel] =
{
50, /*EINT0*/
25, /*EINT 1*/
50, /*EINT2*/
50 /*EINT3*/
}
단위: 50ms
다음과 같은 방법으로 수정할 수도 있습니다.
아인슈타인 박사
EINT_Set_HW_Debounce ()
EINT_SW_Debounce_Modify ()
기능 수정과 같은 것들이죠.
8. 충전기 /USB
고객 참조 _ BMT _ v0. 1.pdf
관련 문서:
Custom \ drv \ misc _ drv \ m678 _ bb \ chr _ parameter.c 고려 사항:
Bmt _ customized _ structbmt _ custom _ chr _ def [] = {};
이것은 충전 관련 전압 및 전류 설정입니다.
정적 상수 kal _ int32 chr _ USB _ detect _ volt
충전기 /USB 에서 감지 한 전압 값입니다.
Mcu\bmt\*. *
Mcu \ drv \ src \ pwic.c.
9. 터치 컨트롤 보드
Custom \ drv \ misc _ drv \ m678 _ bb \ touch _ panel _ custom.c.
Custom \ drv \ misc _ drv \ m678 _ bb \ touch _ panel _ custom.h
Custom \ drv \ misc _ drv \ m678 _ bb \ touch _ panel _ spi.c.
Custom \ drv \ misc _ drv \ m678 _ bb \ touch _ panel _ spi.h
Drv \ src \ touch _ panel.c.
Drv \ src \ touch _ panel _ main.c.
수정된 점은 다음과 같습니다.
GPIO 할당; ADC 값; 좌표값 구성 중단 압력 감지 등
구체적인 수정은 코드를 참조할 수 있다.
10. 양수 색전증
Custom\audio\M678_BB\afe.c (아날로그 스위치, PA 스위치 등). ) 을 참조하십시오
Custom \ audio \ m678 _ bb \ audcoeff.c (fir 입력/출력 매개변수)
Custom \ audio \ m678 _ bb \ NVRAM _ default _ audio.c (게인 값)
L 1audio\afe2.c (AFE 관리 코드)
이상은 하드웨어에서 제공하는 데이터에 따라 조정됩니다!
1 1. 작업
MTK 플랫폼에서 작업을 사용하려면 어떻게 해야 합니까?
DMB 프로젝트를 예로 들어 보겠습니다. 다음 파일을 참조하십시오. Dmb _ 지원 제어
사용자 지정 \ 시스템 \ M678 _ BB \ 사용자 지정 _ 구성. c
사용자 지정 \ 시스템 \ M678 _ BB \ 사용자 지정 _ 구성. h
사용자 지정 \drv\DMB\TCC78X\dmb_hw.c
12 Nor/Nand 플래시 메모리 : T-플래시
새 NAND 추가:
Drv \ src \ NAND _ mtd.c.
정적 상수 flash_list NAND_ID_Table[] =
{
//{ ID, planesize (MB), blocksize (kb), pagesize (b), 주소 주기, 입출력 버스 폭, MTD 하위 드라이버}
//새로운 NAND 관련 정보 추가 (참조 칩 사양)
}
DA (다운로드 에이전트) 부분 코드 (일반적으로 수정할 필요가 없음)
Da _ src \ src \ NAND _ dev _ tbl.c.
Constnand _ device _ s g _ nandflashdevtbl [] =
{
//새로운 NAND 정보 추가 (참조 칩 사양)
}
새로운 Nor 플래시 메모리 추가
Da _ src \ src \ flash _ dev _ tbl.c.
Constnor _ device _ s g _ flashdevtbl [] =
{
//새로운 Nor 정보 추가 (참조 칩 사양)
}
DA 수정 Flash 다운로드 도구에 대한 DA 파일을 다시 생성해야 합니다.