1. CCS3.3 DSP/BIOS PRD(periodic fuction manager) 생성 1. 디렉토리구성.. cmd..dsp2833x_headers.. include.. testprj_2.. testsrc_2 : Linker 컴맨드파일 : Chip관련헤더파일및헤더용 Linker 컴맨드파일 : 사용자인쿠르드파일 : 사용자프로젝트파일및실행파일 (.HEX) : 사용자소스파일 2. 디렉토리설명다른디렉토리는기존 Task 생성예제파일을그대로사용하고 testprj_2, testsrc_2 디렉토리만복사에서사용하거나기존의 testprj_1,testsrs_1 의소스만아래진행에따라추가수정하여 사용하시면됩니다. 3. Setup CCStudio v3.3 을실행합니다. 프로젝트 Open 사용법은 Task 생성예제를참조하시기바랍니다.
4. 소스코드설명 (Main_Bios.c) #include "DSP2833x_Device.h <- DSP 초기화및설정관련 #include "F28335_example.h <- 사용자외부함수, 변수, 정의관리 void main(void) { InitSysCtrl(); <- CPU 클럭설정 ((30*10) / 2 = 150M) InitPieCtrl(); <- 인터럽트관련초기화 InitWatchdog(); <- watch-dog 설정및초기화 InitGpio(); <- CPU I/O 설정 (IN,OUT, 기본기능..) _EX_BUS_ON정의에따라외부버스 ON InitXintf(); <- 내부주변디바이스클럭설정및외부버스타이밍설정 ** DSP/BIOS 관련설정 ** ifdef EXAMPLE_FLASH memcpy(&secureramfuncs_runstart, &secureramfuncs_loadstart,&secureramfuncs_loadend - &secureramfuncs_loadstart); InitFlash(); #endif asm(" EALLOW"); <- Enable EALLOW protected register access GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 0;<- GPIO032 GPIO GpioCtrlRegs.GPBDIR.bit.GPIO32 = 1; <- GPIO32 output GpioDataRegs.GPBSET.bit.GPIO32 = 1; <- GPIO32 pin is set to 1 asm(" EDIS"); // Disable EALLOW protected register access ** DSP/BIOS에서 TINT2,DLOGINT를사용하므로 BIOS사용인터럽트허가 ** SetDBGIER(IER 0x6000); <- Enable everything in IER, plus TINT2 and DLOGINT *(volatile unsigned int *)0x00000C14 = 0x0C00;<- Set TIMER2 FREE=SOFT=1 ** 아래 main() 를종료하면 DSP/BIOS 가동작.. ** } void UserInit(void){ <- 이함수는리셋시 DSP/BIOS 초기화부분에서한번수행후 DSP/BIOS 관련및사용자초기화함수추가 } void task1_proc(void){ <- 이함수는스케줄러에관리되는 TASK } * GPIO 설명 DSP 는특수기능레지스터에접근하기위해서는 EALLOW Bit 를 Set 후접근후사용한다. 사용후 EALLOW Bit 를 Clear 한다. - GPIO 필터설정레지스터 ( 입력시몇클럭동안유지시입력핀을유효시킬것인지사용할때 ) GPxCTRL : GPIO에 Qualification 를사용할때 CLK 종류지정 GPxQSELn : GPIO에 Qualification 를사용할때값설정 - GPIO 설정레지스터 GPxMUXn : 0-3값으로 GPIO 또는특정기능핀으로 I/O핀을정의 GPxDIRn : GPIO핀을입력 (0) 또는출력 (1) 으로설정 GPxPAUn : GPIO핀에 PULL UP 저항을설정 - GPIO 데이터레지스터 GPxDATn : GPIO 입출력데이터레지스터 GPxSETn : 해당비트가 1이면 GPIO 핀을 High로유지시킴 GPxCLEARn : 해당비트가 1이면 GPIO 핀을 Low로유지시킴 GPxTOGGLEn: GPIO 해당핀을 TOGGLE 함.
- CCS3.3 DSP/BIOS PRD 생성 * PRD 란스케줄링에서 Clock Manager 의기본클럭을사용하여주기적인시간마다발생되는 Time Task 로서이루틴은타이머인터럽트의일종이므로소스코딩시정체되는코드나너무긴시간이소요되는코딩은자제해주시기바랍니다. TASK Task1_proc 사용자프로그램 Taskxx_proc 사용자프로그램 Software Interrupt TASK Com_SWI 통신인터럽트처리 Scheduling Task 반환 TI-BIOS Event Scheduling BIOS Timer PRD TIMER Tick 서비스 500Tick. GPIO32 Toggle ntick. 사용자프로그램 AD_SWI A/D 인터럽트처리 H/W Interrupt -> SWI 로변환 통신 SWI_post(&com_swi) A/D SWI_post(&AD_SWI) 1. Main_Bios.c 를 open 후아래소스코드를입력후저장한다. 아래함수에있는실행코드는 C 소스의타이머인터럽트와유사하므로최대한간단명료하게코딩하고 while() 문처럼무한루프에빠지는코드는작성하지않는것이원칙이다다른스케줄러에영향을줌. void Io_Blink(void) <- PRD 스켈줄함수명 { GpioDataRegs.GPBTOGGLE.bit.GPIO32 = 1; <- GPIO32 토글 }
2. DSP/BIOS Config->*.tcf 를실행한다. 더블클릭 3. 스케줄링기본스케줄클럭을확인한다. 오른쪽마우스 선택 ( 왼쪽마우스 )
4. DSP/BIOS 에설정된기본클럭은 1ms 이다. 이클럭은아래 PRD(Periodic Function Manager) 에기본클럭 (1 Tick) 으로사용된다. 5. 스케줄링 PRD(Periodic Function Manager) 에서아래와같이 PRD 를생성한다. 오른쪽마우스 선택 ( 왼쪽마우스 )
* PRD TASK 관리명을입력한다 입력후확인 * Task 관리자생성확인 * 생성한 PRDTask 에사용자환경을설정한다.(blink_PRD0 선택후오른쪽버튼 ) 오른쪽마우스 선택 ( 왼쪽마우스 )
* General 에서기본정보를설정한다. 실행할 Tick 수 (1ms*500 = 500ms) 실제실행할함수명앞에 _ 를붙임. * Task Manager 에서생성된 PRDTask 를확인후 *.tcf 파일을종료합니다.
- CCS3.3 DSP/BIOS PRD TASK 실행 1. JTAG 및에뮬레이터를연결합니다. 선택후마우스왼쪽버튼클릭 2. 내부램으로프로그램을실행할경우아래와같이설정합니다.(Option->Customize) 체크
3. 컴파일하기 (Project->Rebuild All) 에러확인
4. FLASH 에프로그램하기 * 아래 CLOCK 설정메뉴를사용자에맞게설정합니다. * API Interface 파일을등록합니다. 선택
Browe.. 창에서파일을선택후 Excute Operation 탭을실행합니다. * TI 실행파일은 *.OUT 로현재작업디렉토리.. debug 에있습니다. 체크후확인 닫음
5. 프로그램을로딩후 Debug 탭에서 Go Main 기능을실행합니다. Main( ) 함수위치로이동
6. Main_Bios.c 의 Io_Blink() 에 break mode 를설정합니다. 1. 커저를위치시킨후 F9 키를누른다.( 한번더누르면삭제 ) 2. F5 를눌르면노란화살표가나오며정지한다. 그러면현재 PRD Task 스케줄링정상. 3. RUN 시킨후 GPIO32 핀을스코프로관찰한다. - F5 : Debuf->Run - F9 : Debuf->Break Point Toggle