Microsoft PowerPoint - ccs33_bios_com1_semaphore.ppt [호환 모드]

Similar documents
Microsoft PowerPoint - ccs33_bios_PRD.ppt [호환 모드]

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

슬라이드 1

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

슬라이드 1

ATmega128

윈도우시스템프로그래밍

슬라이드 1

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

(8)

인터럽트 * 인터럽트처리메커니즘 ATmega128 인터럽트 2

슬라이드 1

2주차: 입출력 제어 복습

Microsoft Word - Armjtag_문서1.doc

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

윈도우시스템프로그래밍

CANTUS Evaluation Board Ap. Note

KEY 디바이스 드라이버

임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

API 매뉴얼

[8051] 강의자료.PDF

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A636C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - polling.pptx

PowerPoint 프레젠테이션

2 Mitsubishi FX Series Computer Link MITSUBISHI FX SERIES COMPUTER LINK 시스템구성 시스템설정 사용예 사용예 사용예

슬라이드 제목 없음

Section 03 인터럽트활성화와인터럽트서비스루틴연결 34/82 장치에대한인터럽트설정과활성화 내부장치에대한특수레지스터존재 장치의특성을반영한동작설정용또는상태관찰용비트로구성 인터럽트사건의발생패턴을설정해야함 인터럽트활성화비트를 1 로셋하여, 인터럽트발생을허락» 전제, 전역

Chapter #01 Subject

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

슬라이드 1

EWAVR 5.1x 프로젝트 옵션 설정(1_2) 2. Project -> > Option -> > General Option -> > Output / Library Configuration Library Configuration 은 사용하게 될 Library file을

Microsoft PowerPoint - es-arduino-lecture-03

PowerPoint 프레젠테이션

2009년2학기 임베디드시스템 응용

BY-FDP-4-70.hwp

슬라이드 1

Microsoft Word doc

4S 1차년도 평가 발표자료

ISP and CodeVisionAVR C Compiler.hwp

인터럽트 (Interrupt) 범용입출력포트에서입출력의내용을처리하기위해매번입출력을요구하는플래그를검사하는일 (Pollong) 에대하여마이크로컨트롤러에게는상당한시간을소비하게만든다. 인터럽트란 CPU가현재처리하고있는일보다급하게처리해야할사건이발생했을때, 현재수행중인일을중단하고

UART.h #ifndef _UART_H_ #define _UART_H_ #define DIR_TXD #define DIR_RXD sbi(portd,4) cbi(portd,4) #define CPU_CLOCK_HZ UL UART PORT1 void UAR

Microsoft PowerPoint - 제5장 인터럽트 (HBE-MCU-Multi AVR).ppt [호환 모드]

API 매뉴얼

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D>

PRO1_04E [읽기 전용]

MPLAB C18 C

PRO1_09E [읽기 전용]

IAR_IDE_LM3S8962_Config_v3.doc

untitled

*Revision History 날짜 내용 최초작성 Tel Fax [2] page

Mango-E-Toi Board Developer Manual

(SW3704) Gingerbread Source Build & Working Guide

쉽게 풀어쓴 C 프로그래밍

슬라이드 제목 없음

OCW_C언어 기초

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

(Microsoft PowerPoint - \270\266\300\314\305\251\267\316\304\250USB_Host_Device_\272\316\306\256\267\316\264\365\275\307\275\300_Philip.ppt)

슬라이드 1

JVM 메모리구조

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

Microsoft PowerPoint - chap06-2pointer.ppt

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

PowerPoint 프레젠테이션

슬라이드 1

슬라이드 1

10주차.key

HWP Document

<BDC7C7E83520BFB9BAF1BAB8B0EDBCAD2E687770>

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

Microsoft Word - DTM-M300_Spec_V1_0.doc

(6)

Microsoft Word - PEB08_USER_GUIDE.doc

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

lecture4(6.범용IO).hwp

SRC PLUS 제어기 MANUAL

DTS-L300-V2 Specification Page 1 of 14 비접촉온도측정 원거리온도측정 High Accuracy Digital Interface : SPI Arduino UNO 예제코드제공 제품설명 DTS-L300-V2는접촉을하지않고원하는물체표면에온도를 50

2009년2학기 임베디드시스템 응용


TMS320F28335 칩과 SYNCWORKS 사에서제작한 SMC150 기판을사용하기로결정하였다. 마지막으로소리출력부분에대해서는 MP3 모듈과스피커를사용, 해당구간에해당하는음원파일을재생하기위한장치로네오틱스사에서나온 NA-EMP3 보드와 NA-EMP3M 칩을사용하여소리를

2. GCC Assembler와 AVR Assembler의차이 A. GCC Assembler 를사용하는경우 i. Assembly Language Program은.S Extension 을갖는다. ii. C Language Program은.c Extension 을갖는다.

6주차.key

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

PowerPoint 프레젠테이션

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

고급 프로그래밍 설계

AVR Atmega128

T100MD+

PRO1_02E [읽기 전용]

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

목차 1. 개요 USB 드라이버 설치 (FTDI DRIVER) FTDI DRIVER 실행파일 USB 드라이버 확인방법 DEVICE-PROGRAMMER 설치 DEVICE-PROGRAMMER

Microsoft Word ARM_ver2_0a.docx

설계란 무엇인가?

PowerPoint Presentation

MicrocontrollerAcademy_Lab_ST_040709

OSTSen-THL100 사용자설명서 Ver 1.1 Onsystech OSTSen-THL100 Ver1.1 1 of 8 Onsystech

설치 순서 Windows 98 SE/Me/2000/XP 1 PC를 켜고 Windows를 시작합니다. 아직 컴퓨터에 프린터를 연결하지 마십시오. 2 PC에 P-S100 CD-ROM(프 린터 드라이버)을 삽입합니다. 3 설치 프로그램을 시작합니다. q CD-ROM의 PS1

C. KHU-EE xmega Board 에서는 Button 을 2 개만사용하기때문에 GPIO_PUSH_BUTTON_2 과 GPIO_PUSH_BUTTON_3 define 을 Comment 처리 한다. D. AT45DBX 도사용하지않기때문에 Comment 처리한다. E.

Transcription:

1. CCS3.3 DSP/BIOS semaphore 를이용한 COM1 시리얼통신 기존의예제프로그램을바탕으로실제현장에적용가능한 BIOS 프로그램을시작하겠습니다. 이장에서사용할 H/W 는 F28335 내부에있는 UART0 포트를사용해 PC 와 RS-232 통신을 프로세서간동기를맞추는데사용하는 semaphore 를사용해작성해보겠습니다. -Semaphore 란 C 프로그램을작성해보신분이라면광역변수의 0 과 1 상태만가지는 flag 정도라생각하시면됩니다. DSP/BIOS 에서는이플레그기능에전시간에설명한시간지연 (TSK_sleep()) 기능이추가되어있습니다. 결론은 BIOS 에서각 TASK 간이벤트동기와시간지연을동시에사용할수있게만든함수라생각 하시면됩니다. -semaphore 설정방법 CCS BIOS TOOL 에서 1 개또는여러개의 semaphore 를사용자에맞춰생성합니다. - 변수명, 초기치.. - semaphore 사용법 1. SEM_post(&sem_com1_rx_eflg); _ 이벤트를발생시킬때사용하는함수입니다. Item1: CCS BIOS에서생성한 SEM 변수명을 () 에사용합니다. 2. SEM_pend(&sem_com1_rx_eflg,SYS_FOREVER); <- 리턴있음이벤트를대기할때사용하는함수입니다. Item1: CCS BIOS에서생성한 SEM 변수명을 () 에사용합니다. Item2: 함수내시간지연방법설정입니다. SYS_FOREVER : 이벤트가 SEM_post() 될때까지영원히기다림. 1 이상숫자 : 1은 1TICK을의미하며이 TICK동안 SEM_post() 를기다리다탈출합니다. 위경우는리턴되는값을확인하여처리합니다. 리턴 : 0 이면지정한 TICK 동안이벤트가발생하지않았음. 1 이면지정한 TICK 동안이벤트가발생함.. - TEST 환경 (115200Bps,8 Bit, NON Parity, 1STOP) - PC : RS-232 PORT - DSP 보드 : UART0 RS-232 1. 디렉토리구성.. cmd..dsp2833x_headers.. include.. semprj.. semsrc : Linker 컴맨드파일 : Chip 관련헤더파일및헤더용 Linker 컴맨드파일 : 사용자인쿠르드파일 : 사용자프로젝트파일및실행파일 (.HEX) : 사용자소스파일

- CCS3.3 DSP/BIOS Semaphore 구성 TASK Task1_proc UART0 프로그램관리 Semaphore 처리 TIMER Tick 서비스 Taskxx_proc 사용자프로그램 Software Interrupt TASK Uart1_RxSwi UART0 수신처리 Semaphore 처리생성 Scheduling Task 반환 TI-BIOS Event Scheduling BIOS Timer PRD 500Tick. GPIO32 Toggle ntick. 사용자프로그램 H/W Interrupt -> SWI 로변환 통신 (UART0) SWI_post(&Uart1_RxSwi). UART0 수신인터럽트 1. Main_Bios.c 설명 void Uart1_RxSwi(void) { int i,rsr,len; <- SWI 스케줄함수명 :: 실제 UART0 수신처리 rsr = SciaRegs.SCIRXST.all & 0xff; <- 수신상태레지스터 if((rsr & 0x9c)!= 0){ <- 에러검사 SciaRegs.SCICTL1.bit.SWRESET=0; <- reset SciaRegs.SCICTL1.bit.SWRESET=1; <- non reset else{ <- 에러없음. en = (SciaRegs.SCIFFRX.all >> 8) & 0x1f; <- 수신 FIFO에서수신된개수읽음. for(i = 0; i < len; i++){ <- 데이터중최종만읽음. com1_rx_data = SciaRegs.SCIRXBUF.all; SEM_post(&sem_com1_rx_eflg); eflg); <- semaphore 생성 ( 수신된데이터있음.) SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1; <- Clear Overflow flag SciaRegs.SCIFFRX.bit.RXFFINTCLR=1; <- Clear Interrupt flag

2. 소스코드설명 (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 관련설정 ** memcpy(&secureramfuncs_runstart, runstart &secureramfuncs_loadstart,&secureramfuncs_loadend - &secureramfuncs_loadstart); InitFlash(); com_init(_com1,115200l,non_p,8,1);<- COM1 설정 (DSP2833x_sci.c) 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 (OM1 수신처리 ) void Io_Blink(void){ <- PRD 스케줄함수명 Void Uart1_RxSwi(void){ <- COM1_RX SWI 스케줄함수명 3. 소스코드설명 1. DefaultIsr_BIOS.c void SCIRXINTA_ISR(void){ ISR(void){ <- UART0 H/W(PIE9.1) 인터럽트를바로처리하지않고 SWI 로변환하여실행. PieCtrlRegs.PIEACK.all = PIEACK_GROUP9; SWI_post(&UART1_Rx_Swi); <- Must acknowledge the PIE group <- SWI 로변환

2. Main_Bios.c 설명 void Uart1_RxSwi(void) { int i,rsr,len; <- SWI 스케줄함수명 :: 실제 UART0 수신인터럽트처리 rsr = SciaRegs.SCIRXST.all SCIRXST & 0xff; <- 수신상태레지스터 if((rsr & 0x9c)!= 0){ <- 에러검사 SciaRegs.SCICTL1.bit.SWRESET=0; <- reset SciaRegs.SCICTL1.bit.SWRESET=1; <- non reset else{ <- 에러없음. en = (SciaRegs.SCIFFRX.all >> 8) & 0x1f; <- 수신 FIFO에서수신된개수읽음. for(i = 0; i < len; i++){ <- 데이터중최종만읽음. com1_rx_data = SciaRegs.SCIRXBUF.all; SEM_post(&sem_com1_rx_eflg); <- semaphore 생성 ( 수신된데이터있음.) SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1; <- Clear Overflow flag SciaRegs.SCIFFRX.bit.RXFFINTCLR=1; <- Clear Interrupt flag void task1_proc(void) <- 사용자 TASK :: UART0 관리 { while(1) { SEM_pend(&sem_com1_rx_eflg,SYS_FOREVER);<- 1바이트가수실될때까지무한정기다림 com1_putch(com1_rx_data); <- 받은데이터송신 ( 폴링방식 ) TICK 을지정할경우 void task1_proc(void) <- 사용자 TASK :: UART0 관리 { while(1) { if(sem_pend(&sem_com1_rx_eflg,500)){ <- 1바이트가수실될때까지 500 TICK 기다린후처리 ( 리턴참조 ) com1_putch(com1_rx_data); <- 받은데이터송신 ( 폴링방식 )

* CCS3.3 DSP/BIOS 구성및설명 1. Setup CCStudio v3.3 이나 CCSStudio3.3 을실행합니다. 2. 아래와같이 Project 를오픈합니다.(Project->Open) FLASH 에서실행되는프로젝트 버튼클릭

3. Projects Source 파일구성 DSP/BIOS Config 파일 Watch-dog disable 후 C 를실행할때사용, 필요시 project->build option 에서 code entry piont 에서등록하여사용 인터럽트서비스루틴 DelayUs() 함수지원 전역데이터및데이터섹션정의 통신프로그램소스 Flash Memory 관련지원및초기화 CPU I/O 핀초기화 Main() 프로그램 Flash Passwords 관련 CPU 인터럽트초기화 BIOS 인터럽트지원 CPU 클럭설정 Watch-Dog 관련초기화 외부버스초기화 (wait 설정 ) DSP/BIOS Config 에서컴파일시생성 기본 CMD 파일정의 DSP/BIOS Config 에서컴파일시생성

4. DSP/BIOS Config->*.tcf 를실행한다. TASK 생성, LOG_printf 생성법은기존자료참조하세요. 더블클릭 5. System->MEM->L5,L6,L7SARAM 을삭제한다.( 마우스고정후삭제키 ) BIOS 사용메모리확장 Delete 키

6. System->MEM->L4SARAM 내용수정 오른쪽마우스 선택 ( 왼쪽마우스 ) 메모리크기수정 (0x4000) L4-L7 메모리영역모두지정

7. 하드웨어인터럽트를 SWI 로변환 (Scheduling ->HWI->PIE INTERRUPTS->PIE_INT9.1 오른쪽마우스 (PIE_INT9.1) 선택 ( 왼쪽마우스 ) * 하드웨어인터럽트등록 (HWI) 호출되는함수명앞에 _ 를붙임 * 소프트웨어인터럽트허가 (SWI) 체크하지않으면 HWI, 체크하면 SWI 허가

8. Scheduling SWI 등록 (. Scheduling ->Software Interrupt Manager) 오른쪽마우스 선택 ( 왼쪽마우스 ) * SWI 관리명을입력한다.( 프로그램에서호출주소가됨.) 입력후확인

* 생성한 SWI 에사용자환경을설정한다.(UART1_Rx_Swi 선택후오른쪽버튼 ) 오른쪽마우스 선택 ( 왼쪽마우스 ) * General 에서기본정보를설정한다. 주석호출되는함수명앞에 _ 를붙임호출되는함수우선순위레벌 (1( 저 )-15( 고 ))

9. Semaphore 등록 (Synchronization->SEM semaphore Manager) 왼쪽버튼누름 선택 * semaphore 명을입력한다.( 프로그램에서호출변수가됨.) 입력후확인

* 생성한 SEM 에사용자환경을설정한다.(sem_com1_rx_eflg 선택후오른쪽버튼 ) 오른쪽마우스 선택 ( 왼쪽마우스 ) * General 에서기본정보를설정한다. 주석 Semaphore 초기치

* Scheduling SWI 에서생성된 UART1_Rx_Swi 를확인후 *.tcf 파일을종료합니다.

- CCS3.3 DSP/BIOS 실행 1. JTAG 및에뮬레이터를연결합니다. 선택후마우스왼쪽버튼클릭 2. 내부램으로프로그램을실행할경우아래와같이설정합니다.(Option->Customize) 체크

3. 컴파일하기 (Project->Rebuild All) 에러확인

4. FLASH 에프로그램하기 * 아래 CLOCK 설정메뉴를사용자에맞게설정합니다. * API Interface 파일을등록합니다. 선택

Browe.. 창에서파일을선택후 Excute Operation 탭을실행합니다. * TI 실행파일은 *.OUT 로현재작업디렉토리.. debug 에있습니다. 체크후확인 닫음

5. 프로그램을로딩후 Debug 탭에서 Go Main -> RUN 기능을실행합니다. 실행 Main( ) 함수위치로이동 6. BIOS 디버그방법은기존 BIOS 자료를참고하세요.

* TEST 프로그램실행 1. 하이퍼터미널을시작함니다. 2. 하이퍼터미널에서통신포트를설정함니다. 보레이트 데이터비트는반드시재설정 ( 하이퍼에러 )

3. 하이터미널이실행되면아무키나누르면반송됩니다.