Software/Android2015. 1. 27. 10:27

안드로이드 앱을 만들어야 해서 하는김에 자료를 만들어 두려고 합니다.


개발환경 설정은 크게 n가지로 나눕니다.


1. eclipse설치

2. JAVA JDK 설치(목적에 따라 JAVA SE or EE)

3. 환경변수 설정

4. SDK, ADT 설치

5. 스마트폰 개발자 옵션 활성화


1.

https://www.eclipse.org

에 들어가서 IDE를 받아 설치합니다. 저는 

Eclipse IDE for Java EE Developer

를 설치했습니다. 보통 Java Developers를 설치해도 문제 없습니다.

2.
오라클 홈페이지로 들어가서 Java SE를 설치합니다. 용도에 따라서 EE를 설치하는 경우도 있습니다.
JDK, JRE를 선택할 수 있는데, JDK를 설치하면 됩니다.(JDK에서 JRE를 포함합니다.)

라이센스 동의 하시고 설치를 합시다.


3.(출처 : http://blog.naver.com/code1st/220118711916)

Java의 콘솔 입출력 과정과 컴파일 과정에서 명령 프롬프트(cmd)를 통해 컴파일 하는 과정이 있습니다. 이 경로를 함축적으로 표현하기 위해 환경변수를 설정합니다.

우리가 ~.java파일을 만들고 컴퓨터가 읽기위한 .class파일로 컴파일 하는것이 javac입니다. 환경변수를 설정해주면 명령프롬프트에서 간단히 java컴파일러 및 java를 실행할 수 있게됩니다.


내컴퓨터->속성->고급 시스템 설정->환경 변수



시스템 변수를 아래와 같이 새로 만들어 줍시다.



Path라는 시스템 변수에 JAVAHOME의 bin폴더를 넣어줍니다. 단, 각각의 경로를 ; 로 구분해야함을 잊지맙시다.



JAVAHOME의 lib폴더를 CLASSPATH라는 이름으로 만들어 줍니다.



명령프롬프트에서 3가지 명령을 해봅시다

javac -version

java -version

echo %CLASSPATH%


환경변수 설정이 제대로 되었다면 대략 아래와 같은 결과가 나옵니다.



4.

이제 이클립스를 통한 안드로이드 개발을 위해서 이와 관련된 Tool를 받아야 합니다. Virtual Device등을 설치하기 위해서 Android SDK를 설채해야 합니다.

http://developer.android.com 로 접속합니다.


Download에서 other download options


windows용 Android SDK Tool을 받읍시다.

Android studio를 써보지는 않았지만 eclipse와는 별개의 IDE로 보입니다. 이클립스 환경에서 개발하시던 분은 굳이 개발환경을 바꿀 필요는 없겠죠?


다운로드 받으신 후 쭉- 설치하시면 됩니다. 설치 후 SDK Manager를 실행하면 설치할 API버전이 나열됩니다. 저희들이 개발한 버전에 맞추어서 설치하시면 됩니다.

개인적으로 최신, 최저 및 타겟API버전 3종류를 설치하시면 될것 같습니다.

참고로 저는 금일 기준으로 5.0.1, 4.4.2, 4.2.2, 4.0, 2.1, 2.2를 설치하였습니다.



SDK는 이클립스에서 설치할 수 있습니다. 자세한 사항은 아래에서 확인

http://blog.lul.kr/54


eclipse -> help install new software에서 설치를 위한 URL을 Add합니다.

(httpps://dl-ssl.google.com/android/eclipse/)


다 설치해도 무방하며 ndk는 필요한 경우가 아니면 설치하지 않아도 됩니다.



5.

스마트폰의 개발옵션 활성화는 아래를 참고하였다.

http://ha-roo.com/220244125465


옵티머스 g2기준으로 설정->일반->휴대폰 정보->소프트웨어 정보

소프트웨어 정보에서 빌드 번호를 마구 터치해주면 됩니다.

이후 '일반'에서 활성화되는 개발자 옵션에서 디버깅의 'USB 디버깅'을 체크해 줍시다.

'Software > Android' 카테고리의 다른 글

setContentView()  (0) 2015.01.29
짤막한 tip. 인수 생략  (0) 2015.01.29
용어  (0) 2015.01.29
일단 한번 돌려보기  (0) 2015.01.29
안드로이드 새 프로젝트 만들기  (0) 2015.01.29
Posted by 십자성군
Project/논문분석2015. 1. 12. 22:09

첨부파일:


-Title-

Modelling, simulation and control of an electric unicycle


A. Kadis, D. Caldecott, A. Edwards, M. Jerbic

R. Madigan, M Haynes, B. Cazzolato and Z. Prime,

The University of Adelaide, Australia



요즘들어 가끔씩 학교를 거닐다 보면 아래와 같은 형태의 vehicle을 볼 때가 있습니다.


위의것을 Solo wheel self balancing unicycle이라고 합니다.


이것도 self balancing unicycle이라고 하죠. 차이는 의자가 있는냐 없느냐 정도이고 바퀴 하나로 자세를 잡는 탈것입니다.


제가 소개할 논문에서 다루는 제품의 이름은 MICYCLE이라고 하며 아래 URL주소를 통해 동영상을 볼 수 있습니다.

URL : http://www.youtube.com/watch?v=kMeH9IQgxLU




오스트레일리아의 Adelaide대학의 연구실에서 만든것으로 SBU의 원형이 되었는지 어떤지는 모르겠습니다만, 실제로 만들고 시연 동영상까지 있기때문에 참고하게 되었습니다.


이번 논문에서 다루는 내용은 아래와 같습니다.

이 시스템의 기계적이고 전자적인 요소를 고려하여 설계되었으며 또한 matlab의 simulink를 통하여 라그랑지안을 이용해 system dynamics를 도출하였다고 합니다. 즉, 동역학식에 의한 시스템 모델링을 근거로 하여 설계되었다는 것입니다.

이 논문에서는 시스템의 pitch방향의 안정화를 위한 선형제어기를 제안합니다.

마지막으로, simulink 시뮬레이션과 실제 실험 결과를 비교합니다.



위 사진은 MICYCLE의 steering 및 전기적 요소들을 포함한 기계적인 설계를 보여주고 있습니다.


MICYCLE의 설계개요는 사용자가 약 한시간정도 타고 배울 수 있는 self-balancing의 외발자동차를 만드는 것입니다. 이를 위해서 제어시스템이 pitch방향의 자세를 잡도록 하고 기계적인 steering linkage가 사용자가 roll방향의 밸런싱을 잡는것을 보조하기 위해서 디자인되었습니다.


위 설계에서 가장 중요한 요소가 steering 메카니즘인데요, fork assembly는 바퀴부근에 장착되어 있는 페달과 조향을 위한 steering 사이의 연결장치 역할을 합니다. 제어시의 발산과 떨림을 제거하기 위해서 steering arm과 rotary damper를 중앙에 맞춰줄 필요가 있으며 이를 위해 steering 메카니즘에 비틀림 스프링을 포함시켰다고 합니다.


또한 위 시스템은 oversteering에 대비하여15도 라는 기계적인 제한을 두고 있습니다.



'Project > 논문분석' 카테고리의 다른 글

이 카테고리는?  (0) 2015.01.12
Posted by 십자성군
Project/논문분석2015. 1. 12. 22:03

방학도중 눈여겨볼만한 논문들을 읽어보고 분석해서 다른 사람들에게 설명한다는 깊~고 좋은 의도로 교수님이 하자고 하셨지만... 정말 귀찮다!


하지만 그냥 자료로 가지고 있는것보다는 넷상에서 영구보관하는게 좋다고 생각하여 이렇게 게시하도록 한다.


저작권 문제가 생길경우 비공개로 돌립니다.

'Project > 논문분석' 카테고리의 다른 글

Modelling, simulation and control of an electric unicycle  (0) 2015.01.12
Posted by 십자성군
Software/Programming2015. 1. 11. 03:10


'Software > Programming' 카테고리의 다른 글

volatile(Java)  (0) 2016.04.15
volatile(C,C++)  (0) 2016.04.15
MFC)버튼을 누르는 동안 지속되는 카운팅 예제  (2) 2014.10.19
비트필드(Bit Field)  (0) 2014.08.11
[비선형 자료구조]트리.그래프 (AVL 트리)  (1) 2013.05.25
Posted by 십자성군
TMS320/F283352015. 1. 11. 02:10

typedef int                 int16;

typedef long                int32;

typedef long long           int64;

typedef unsigned int        Uint16;

typedef unsigned long       Uint32;

typedef unsigned long long  Uint64;

typedef float               float32;

typedef long double         float64;


또한 char는 2바이트로 이루어져 있다.

'TMS320 > F28335' 카테고리의 다른 글

10247-D creating output section ".sysmem" without SECTIONS specification  (0) 2015.07.31
cmd 메모리 문제  (0) 2015.07.31
DSP2812의 Endian  (0) 2015.01.11
PWM  (1) 2014.08.20
[예제분석] PWM  (0) 2014.08.20
Posted by 십자성군
TMS320/F283352015. 1. 11. 01:12

little Endian임

자료처리를 생각한다면 당연하겠지만...

'TMS320 > F28335' 카테고리의 다른 글

cmd 메모리 문제  (0) 2015.07.31
DSP2812의 자료형과 그 길이  (0) 2015.01.11
PWM  (1) 2014.08.20
[예제분석] PWM  (0) 2014.08.20
인터럽트 관련 소스  (0) 2014.08.20
Posted by 십자성군
기타/문제해결기2015. 1. 6. 12:37

가끔씩 설명서에서 RS232 케이블 연결이 잘못나와있는 경우가 있습니다. 이 때는 GND선과 송 수신 선의 위치가 거꾸로 되어있는 경우입니다.


코드로 수정할 수 없는 부분이니 이 경우에는 일단 선의 위치를 바꿔봅시다.

'기타 > 문제해결기' 카테고리의 다른 글

[Android]Noclassedeffounderror  (0) 2015.02.26
Android에서 에러가 발생했을 때.  (0) 2015.02.04
cannot set up guest memory android_arm  (0) 2015.01.29
관리자 권한  (0) 2013.09.06
포맷  (0) 2013.09.06
Posted by 십자성군
Software/Programming2014. 10. 19. 17:11

주요 개념

1. Sub Classing

2. Thread

3. Counting & Delay


목표

-Button을 꾹~ 누르는 동안 Edit Control의 숫자를 자동으로 상승시키기.

-일반적인 Button Counting도 함께 합니다.

--------------------------------------------------------------

일단 따라해 봅시다.

1. 일반적인 Button Counting


1.MFC 새 프로젝트를 만듭니다. 프로젝트명은 MFCButtonCounting라고 하겠습니다.

2.아래와 같이 오브젝트를 배치합니다.



Edit Control ID : IDC_EDIT1, IDC_EDIT2

Button ID : IDC_BUTTON1, IDC_BUTTON2



누르는 동안의 Counting에 사용할 버튼과 Edit는 상단의 IDC_BUTTON1과 IDC_EDIT1 입니다.

2는 그냥 버튼 Counting에 사용하겠습니다.


MFCButtonCountingDlg.h에 public으로 int EDText1변수를 만들었습니다. 

Dialog 리소스에서 해당 오브젝트에 우클릭 후 변수추가를 해주면 됩니다.


일단 평범한 버튼카운터를 만들어 봅시다. 잘 아시는 분은 넘어가셔도 좋습니다.


Button2의 속성의 컨트롤 이벤트에서 BN_CLICKED를 활성화 해 주었습니다.

우리는 생성된 OnBnClickedButton2를 Overriding해주면 됩니다.



public영역에서 2개의 변수와 하나의 함수를 발견할 수 있습니다. cpp로 가서 OnBnClickedButton2()를 아래와 같이 작성해 줍시다.

EDText2+=1;

UpdateData(FALSE);


실행시키시면 버튼2를 누를때마다 숫자가 증가함을 확인할 수 있습니다.



2. 지속되는 Button Counting

위와같이 일반적인 카운터은 쉽게 만들 수 있으나 버튼을 누르는 동안 지속되는 카운터는 몇가지 고려해야 할 사항이 있습니다.

첫째로 MFC에서는 누르는동안 실행해주기 위한 함수는 제공하지 않습니다.

둘째로 버튼을 누르고 카운팅하는 동안 다른 동작이 정지해서는 안됩니다.


두번째 문제는 Thread를 사용해서 쉽게 해결할 수 있습니다.

첫번째 때문에 저희가 이를 위한 함수를 만들어야 하는거죠.

이를 위한 해결책을 두가지 제시할 수 있는데 첫째가 PreTranslateMessage이고 둘째가 Sub Classing입니다.


PreTranslateMessage를 통해 우리는 소프트웨어에서 발생하는 모든 메시지를 가로채서 이에 대한 처리를 할 수 있습니다.

SubClassing을 사용하면 만들기는 조금 귀찮아질 수 있으나 원하는 메시지에 대해서만 처리시킬 수 있습니다. 여기서는 SubClassing을 사용합니다.


SubClassing을 사용해서 Button1에 대해 종속되는 Class를 하나 생성할 것입니다.


1.

프로젝트->클래스 추가를 통해 MFC클래스를 만들어 줍니다.


위와 같이 만들어 줍니다.


2.

클래스마법사를 이용해서 다음과 같이 메시지 함수를 오버라이딩 합니다.

버튼을 눌렀을때와 뗐을때의 메시지를 만들었습니다.


3.


'GetParent()->'로 부모클래스의 객체를 불러오고

PostMessageW를 사용해서 부모 클래스에 메시지를 보냅니다. GetDlgCtrlID()를 통해 부모객체 여기서는 BUTTON1의 아이디 IDC_BUTTON1을 참조할 수 있습니다. 여기서 +몇을 해 주어도 상관 없습니다.

후에 부모클래스에서 OnCommand를 통해 받는 파라메터값이 됩니다.


Dlg의 헤더에 아래 변수를 추가합니다.


private:

ButtonClass m_TestButton;


m_TestButton : 앞서 작성한 클래스형의 변수입니다.


아래와 같이 초기화를 해줍니다.


이렇게 m_TestButton은 IDC_BUTTON1의 서브클래스가 되었습니다.

이걸로 서브클래스에서 작성할 것은 끝났습니다.


4.

이제 Thread를 만듭니다.


Dlg 헤더파일에 다음을 추가로 작성해 줍시다.


public:

CWinThread* CountingThread;

LRESULT OnUpdateData(WPARAM wParam, LPARAM lParam);


private:

ButtonClass m_TestButton;

virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);


CountingThread : Thread 포인터 변수입니다.

OnCommand : 클래스가 메시지를 받았을 때의 동작을 정하는 함수입니다.

OnUpdateData : 메시지 처리후의 동작입니다. 짧지만 제일 중요한 부분입니다.


OnCommand는 클래스마법사에서 가상함수로 만들 수 있습니다.

OnUpdateData는 직접 작성하시면 됩니다.



위와 같은 함수를 만들어 줍시다.

Delay는 말 그대로 버튼을 누르고 있는동안 딜레이를 주기위한 함수입니다. 이부분은 가져온 부분이라서 관심있으신 분은 스스로 찾아보셔야 하겠습니다.


MyThread는 버튼을 누른동안 Thread로써 기능할 함수입니다. 여기서 pClass는 Dlg클래스가 되겠습니다. 저 두 함수위에 bool threadFlag = false로 변수를 하나 만들어 주었습니다. 버튼을 누른동안 true가 될것이고 떼었을 때 false로 전환될것입니다. 딜레이를 주면서 매 루프마다 변수를 1씩 늘려줍니다.



여기서 PostMessageW는 잠시 보류하고 대신 UpdateData(FALSE); 구문을 넣어줍시다.


그 아래 PostMessageW(THREAD_UPDATE)가 중요합니다.


주의할 것은 두 함수 다 클래스 밖에 있는 전역함수라는 것입니다.Thread는 클래스 밖에서 동작하고 있습니다.


5.

Thread를 동작시켜 봅시다.

OnCommand의 내용입니다. DestroyThread는 아직 놔둡시다. 다른 파일로 해서 클래스명이 약간 다릅니다. 조심해 주세요.

서브클래스로부터 받은 값에 따라 동작하게 하였습니다.

여기서 중요한 구문은 CountingThread = AfxBeginThread(MyThread,this) 입니다.

AfxBeginThread에 대해서 조사바랍니다. MFC에서 사용하는 Thread관련 함수이며 대상 함수가 정적함수여야 인수로 받을 수 있습니다.


만들어진 소프트를 실행시켜 봅시다. 에러가 발생합니다. UpdateData함수는 메인 클래스 밖의 함수에서 사용할 수 없습니다. 우선은 MyThread의 UpdateData구문을 지워줍시다. 그러면 값의 갱신이 실시간으로는 보이지 않지만 갱신되고 있음을 알 수 있습니다.

꾹~ 누르는 동안은 아무변화 없다가 버튼을 떼면 값이 갱신됩니다.


6.

클래스 밖에서 UpdateData구문을 실행할 수 없기 때문에 메시지를 보내 실행하게 해야  합니다.


Dlg의 헤더파일에 아래와 같은 구문을 넣습니다.


클래스 내에 아래 구문을 추가합니다.


public:

LRESULT OnUpdateData(WPARAM wParam, LPARAM lParam);


OnUpdateData : 메시지 처리후의 동작입니다. 짧지만 제일 중요한 부분입니다.

OnUpdateData는 직접 작성하시면 됩니다.


Dlg의 cpp의 메시지맵에 ON_MESSAGE구문을 넣습니다.


Dlg의 cpp에 아래 함수를 추가합니다.




위 MyThread 함수에 있는 PostMessageW 를 활성화 시킵시다.

실시간으로 업데이트되는 것을 확인할 수 있습니다.

'Software > Programming' 카테고리의 다른 글

volatile(C,C++)  (0) 2016.04.15
구조체와 공용체. 공용체의 패딩  (0) 2015.01.11
비트필드(Bit Field)  (0) 2014.08.11
[비선형 자료구조]트리.그래프 (AVL 트리)  (1) 2013.05.25
전위표기. 후위표기  (0) 2013.05.25
Posted by 십자성군

실험용 참고 PDF입니다.


sn7402.pdf


sn7404.pdf


sn7486.pdf


sn74ls00.pdf


sn74ls08.pdf


sn74ls32.pdf


실험의 Keyword는 아래와 같습니다.

-디지털 시스템과 아날로그 시스템

-2,8,10,16진수

-TTL

-부울함수(Boolean function), 논리회로(Logic circuit)

-바이너리 논리관계

-디지털 IC

-논리 함수와 진리표

-소자의 출력(Active high, Active low)



?)Open collector

Posted by 십자성군
TMS320/F283352014. 8. 20. 16:38

PWM

예제 및 레퍼런스를 참고하여 일부만 설명하겠다.


참고예제[초기화]

void InitEPwm1Module(void)

{

/* Setup TBCLK */

EPwm1Regs.TBPRD = (SYSCLK/PWMCARRIER)-1; /* Set Timer Period */

EPwm1Regs.TBCTR = 0; /* Clear Counter */


/* Set Compare values */

EPwm1Regs.CMPA.half.CMPA = ((EPwm1Regs.TBPRD+1)>>1); /* Set Compare A value to 50% */


/* Setup counter mode */

EPwm1Regs.TBCTL.bit.CTRMODE = 0; /* Count Up (Asymmetric) */

EPwm1Regs.TBPHS.half.TBPHS = 0; /* Phase is 0 */

EPwm1Regs.TBCTL.bit.PHSEN = 0; /* Disable phase loading */

EPwm1Regs.TBCTL.bit.PRDLD = 0; /* Period Register is loaded from its shadow when CNTR=Zero */

EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0; /* Clock ratio to SYSCLKOUT */

EPwm1Regs.TBCTL.bit.CLKDIV = 0; /* TBCLK = SYSCLK / (HSPCLKDIV * CLKDIV) */


/* Setup shadowing */

EPwm1Regs.CMPCTL.bit.SHDWAMODE = 0; /* Enable Shadowing */

EPwm1Regs.CMPCTL.bit.LOADAMODE = 0; /* Load on CNTR=Zero */


/* Set actions */

EPwm1Regs.AQCTLA.bit.ZRO = 2; /* Set EPWM1A on CNTR=Zero */

EPwm1Regs.AQCTLA.bit.CAU = 1; /* Clear EPWM1A on event A, up count */


/* Set Interrupts */

EPwm1Regs.ETSEL.bit.INTSEL = 1; /* Select INT on CNTR=Zero */

EPwm1Regs.ETSEL.bit.INTEN = 1; /* Enable INT */

EPwm1Regs.ETPS.bit.INTPRD = 1; /* Generate INT on 1st event */

}





1. TBPRD : Time-Base Period Register


Time-Base Submodule Registers중 하나


값은 0~FFFF


Time-Base counter의 주기를 정하고 PWM 주파수를 설정한다.

이 레지스터에 대한 쉐도잉은 TBCTL(Time-Base Control Register)의 비트 설정에 따라 가불을 정할 수 있다. 기본적으로 가능하게 설정되어 있다.


TBCTL = 0일때

-쉐도우(은폐)가 가능하고 모든 읽고 쓰기가 자동적으로 쉐도우 레지스터로 전송된다. 이 경우, 활성화된 레지스터(TBPRD)는 time-base counter가 0이 될 때 마다 쉐도우 레지스터에 의해 로드된다.

TBCTL = 1일때

-쉐도우(은폐)가 불가능하게 되고 모든 읽고 쓰기가 직접 활성화된 레지스터로 전송된다. 이는 즉, 레지스터가 하드웨어를 조정하게 되는것이다.


active 레지스터와 shadow 레지스터는 같은 메모리 맵 주소를 공유한다.


2. TBCTR : Time-Base Counter Register



위 레지스터를 읽어 time-base counter의 값을 읽을 수 있다.

또한 위 레지스터에 쓺으로써 time-base counter의 값을 정할 수 있다. 쓰는 즉시 바로 업데이트 된다.

쓰기는 TBCLK(time-base clock)에 동기화되지 않으며 또한 위 레지스터는 쉐도우(은폐) 되지 않는다.


3. CMPA : Counter-Compare A Register


활성화된 CMPA 레지스터는 TBCTR과 계속 비교된다. 값이 같을 경우, counter-compare 모듈은 '두 값이 같다'는 이벤트를 발생시킨다. 이 이벤트는 action-qualifer(동작권한자) 영역으로 보내지는데 위 이벤트를 통과시키거나 몇가지 동작을 발생시킨다.

이 동작들은 AQCTLA와 AQCTLB레지스터에 영향을 받는 EPWMxA나 EPWMxB 출력에 적용된다. 동작들은 다음과 같다.


1. 아무것도 하지 않는다 : 이벤트를 무시한다

2. Clear : EPWMxA EPWMxB 신호를 low하게 한다

3. Set : EPWMxA EPWMxB 신호를 high하게 한다.

4. EPWMxA 나 EPWMxB신호를 반전시킨다.


좀 번역체가 되었는데 즉 이런 말이다.

TBCTR과 계속 비교하다가 값이 같을 경우에 이벤트를 발생시키고 이 이벤트를 조건으로 갖는 몇가지 이벤트를 다시 발생시킨다.

이 이벤트들은 EPWMxA나 EPWMxB의 출력과 관계된다.


CMPCTL[SHDWAMODE] = 0

:shadow가 가능하고 모든 읽고 쓰기가 자동적으로 shadow register로 전송된다. 이 경우, CMPCTL[LOADAMODE] 비트필드는 이벤트가 shadow register로부터 어떤 active register를 로드할지 정한다.

:쓰기 전에, 쉐도우 레지스터가 현재 꽉 차있는지 확인하기 위해 CPMCTL[SHDWAFULL] 비트를 읽을 수 있다.


CMPCTL[SHDWAMODE] = 1

:shadow register가 사용불가하고 모든 읽고 쓰기가 직접 active register로 전송된다. 이는 레지스터가 직접 하드웨어를 제어함을 의미한다.

:어떤 모드라도 active 및 shadow 레지스터는 같은 메모리맵 주소를 공유한다.


4. TBCTL

[CTRMODE, PHSEN, PRDLD, HSPCLKDIV, CLKDIV]






15:14

 FREE,SOFT

 Emulatio Mode Bits

emulation events과정중 ePWM time-base counter의 동작을 선정한다.


00:time-base counter의 증감 후 정지한다.

01:카운터가 전체 사이클을 종료 후 정지한다

: Up-count mode : time-base counter = period(TBCTR = TBPRD)일때 정지한다.

즉, 카운터의 값이 period값에 도달했을 때 정지한다.

: Down-count mode : time-base counter = 0x0000(TBCTR = 0x0000)일때 정지한다.

즉, 카운터의 값이 0에 도달했을 때 정지한다.

: Up-down-count mode : time-base counter = 0x0000(TBCTR = 0x0000)일때 정지한다.

즉, 카운터의 값이 0에 도달했을 때 정지한다.

13 

PHSDIR 

 Phase Direction Bit

time-base counter가 up-down-count mode일 때만 사용된다.


PHSDIR bit는 time-base counter(TBCTR)가 동기화 이벤트가 발생했을 때의 카운트 하는 방향성(count up/count down)을 가리킨다. 또한 새로운 phase value를 TBPHS레지스터로부터 불러온다. 동기화 이벤트가 발생하기 전에는 카운터 방향성에 의존하지 않는다.


up-count 또는 down-count일 때는 무시된다.


0 : 동기화 이벤트 발생 후 count-down 한다.

1 : 동기화 이벤트 발생 후 count-up 한다.

12:10 

CLKDIV 

 Time-base Clock Prescale Bits


이 3개의 비트는 time-base 클럭의 프리스케일 값의 일부를 정한다.

TBCLK = SYSCLKOUT / (HSPCLKDIV * CLKDIV)


CLK는 2의 n승이 된다. 예를들어 CLKDIV = 111일 때, 2^7=128이다

9:7 

HSPCLKDIV 

 High Speed Time-base Clock Prescale Bits


이 3개의 비트는 time-base 클럭의 프리스케일 값의 일부를 정한다.

TBCLK = SYSCLKOUT / (HSPCLKDIV*CLKDIV)


이 분주기는 TMS320x281x 시스템의 Event Manager peripheral 의 HSPCLK를 모방하고 있다.


000 : /1(default)

...

...

111 : /14 : /(2*7)

 6

 SWFSYNC

 Software Forced Synchronization Pulse


0 : 

 5:4

SYNCOSEL 

Synchronization Output Select


EPWMxSYNCO 신호의 출처를 정한다

00 : EPWMxSYNC

01 : CTR = zero

10 : CTR = CMPB

11 : EPWMxSYNCO 신호를 사용불가능하게 한다.

PRDLD 

Active Period Register Load From Shadow Register Select


0 :

TBCTR(time-base counter)값이 0에 도달했을 때, 주기 레지스터(period register : TBPRD)의 값을 쉐도우 레지스터를 통해 로드하게 한다.


1 :

쉐도우 레지스터를 쓰지않고 즉시 TBPRD로부터 값을 읽어들인다.

TBPRD가 동작중이라도 직접 접근하여 읽고 쓰기를 한다.

PHSEN 

 Counter Register Load From Phase Register Enable


0 :

TBCTR(time-base counter)의 값을 읽을 때, TBPHS(time-base phase register)를 사용하지 않는다.


1 : 

EPWMxSYNCI 입력 신호가 발생하거나 SWFSYNC 비트에 의해 software synchronization 이 들어왔을 때 phase register를 통해서 time-base counter를 로드한다.

 1:0

CTRMODE 

 Counter Mode
time-base ocunter 모드는 한번 설정된 후 일반적인 동작중에서는 바뀌지 않는다.

아래의 설정을 통해 만약 카운터의 모드를 바꿀 경우 다음 edge부터 효과를 발휘하고 현재 카운터 값은 모드 변경전에 증가 또는 감소 된다.

모드설정
00 : Up-count mode
01 : Down-count mode
10 : Up-down-count mode
11 : Stop-freeze counter operation(default on reset)



TBPHS : Time-Base Phase Register


선택된 ePWM의 time-base counter phase[단계]를 설정한다. 이 phase는 동기화 입력신호를 공급하는 time-base에 대한 것이다.


TBCLT의 PHSEN = 0일 때,

:동기화 이벤트는 무시되고 time-base counter은 phase와 무관하게 로드된다.

TBCLT의 PHSEN = 1일 때,

:동기화 이벤트가 발생했을 때, TBCTR은 phase를 로드한다. 동기화 이벤트는 동기화 입력신호(EPWMxSYNCI)나 software forced synchronization에 의해 초기화된다.


CMPCTL : Counter-Compare Control Register



SHDWBFULL 

 Counter-compare B(CMPB) Shadow Register Full Status Flag


CMPB 쉐도우 레지스터가 꽉 찼는지에 대한 상태레지스터이다.

load-strobe 발생 시 한번 자동 클리어 된다.


0 : CMPB shadow FIFO not full yet

1 : CMPB 쉐도우 FIFO가 가득 찼다. CPU wirte는 현재 쉐도우 값에 덮어쓰기를 하게된다.

SHDWAFULL 

Counter-compare A(CMPa)Shadow Register Full Status Flag


CMPA:CMPAHR 레지스터에 32비트가 쓰이거나 CMPA레지스터에 16비트가 쓰일 때 flag가 1로 셋팅된다. 단, CMPAHR레지스터에 대한 16비트 쓰기에는 영향을 받지 않는다.


0 : CMPA 쉐도우 FIFO가 아직 full 되지 않았다.

1 : CMPA 쉐도우 FIFO가 가득 찼다. CPU Write는 현재 쉐도우 값에 덮어쓰기를 하게된다.  

SHDWBMODE 

 Counter-compare B(CMPB) Register Operating Mode


0 : 쉐도우 모드. double buffer로 동작한다. 모든 쓰기는 CPU를 통하여 shadow register에 접근한다.

1 : immediate 모드(즉시 모드). 

SHDWAMODE 

 Counter-compare A(CMPA) Register Operating Mode


위와 같다.

3-2 

LOADBMODE 

Active Counter-Compare B(CMPB) Load From Shadow Select Mode


immediate mode(CMPCTL[SHDWBMODE]=1])일 때는 동작하지 않는다.

00 : Load on CTR = Zero : TBCTR=0 일 때 

01 : Load on CTR = PRD : TBCTR=TBPRD 일 때

10 : Load on either CTR = Zero or CTR = PRD : CTR이 0이거나 PRD와 같을 때

11 : Freeze : load하지 않는다.

1-0 

LOADAMODE 

 Active Counter-Compare A(CMPA) Load From Shadow Select Mode


위와 같다


AQCTL


ETSEL


ETPS


'TMS320 > F28335' 카테고리의 다른 글

DSP2812의 자료형과 그 길이  (0) 2015.01.11
DSP2812의 Endian  (0) 2015.01.11
[예제분석] PWM  (0) 2014.08.20
인터럽트 관련 소스  (0) 2014.08.20
2812와 달라진 28335의 주변회로  (0) 2014.08.20
Posted by 십자성군