embeded/Cortex-M3 Ti2012. 6. 28. 22:00
기본제공 되는 예제에서 unsigned 만 삭제하면 문제없이 영하에 대해서도 작동한다.

long GetTemperature(char isCelcius)
{
	long ulADC0_Value[1];
	long ulTemp_ValueC;
	long ulTemp_ValueF;
	
	ADCProcessorTrigger(ADC0_BASE, 3);
	while(!ADCIntStatus(ADC0_BASE, 3, false))
	{
	}

	ADCSequenceDataGet(ADC0_BASE, 3, ulADC0_Value);
	ulTemp_ValueC = ((1475 * 1023) - (2250 * ulADC0_Value[0])) / 10230;
	ulTemp_ValueF = ((ulTemp_ValueC * 9) + 160) / 5;

	if(isCelcius) return ulTemp_ValueC;
	return ulTemp_ValueF;
}
Posted by 구차니
embeded/Cortex-M3 Ti2012. 6. 18. 22:52
이름은 거창한데,
간단하게 말하면 잘못 구성된 인터럽트 전송 방식에서의 문제점 이다.

void main()
{
    while(1)
        uart_handler();
}

void uart_handler()
{
    if(send != recv) flush();
}

대략 이런 구조에서 단순하게 send와 recv로 전송할 데이터가 있는지만 확인하고
flush()를 이용해 uart tx finish interrupt를 통해 데이터를 지속적으로 보내려고 할경우
uart_handler()에 의해 루프를 도는중 지속적으로 flush를 함으로서 데이터가 몇바이트 깨지거나
순서가 바뀌는 것 같은 문제가 발생하기도 한다.


간단하고 당연한(?) 해결책은
전송이 시작되었고 전송중이라는 플래그를 두는 것. 
Posted by 구차니
embeded2012. 4. 21. 13:57
KEIL 설명서를 보면 C51 C166 C251이 언급이 되는데
검색을 해보니 ARM은 그냥 ARM이라고 표기되는듯 하고

C51은 8051용
C251은 MCS251용
C166은 infenion C16x 패밀리 혹은 STMicroelectronics ST10 패밀리용 컴파일러이다.

[링크 :  http://www.keil.com/product/]
    [링크 :   http://www.keil.com/arm/mdk.asp] ARM
    [링크 :   http://www.keil.com/c51/c51.asp] 8051
    [링크 :   http://www.keil.com/c166/c166.asp] SH architecture ?
    [링크 :   http://www.keil.com/c251/c251.asp] MCS251(8051 하위호환이면 명령어 확장일뿐?)


MCS는 Micro Controller System 의 약자이고
MCS-81은 통상 8051이라는 불리는 녀석
그리고 MCS-251은 MCS-81과 바이너리 호환성을 지닌 상위버전이다.

[링크 :  http://www.mykit.com/kor/ele/micom/micomMCS_51.htm] Micro Controller System 51 (MCS51) = 8051
[링크 :  http://www.zmitac.aei.polsl.pl/Electronics_Firm_Docs/mcs51/datashts/27262001.pdf] MCS251

'embeded' 카테고리의 다른 글

Z80 M6800  (0) 2014.01.27
기즈모 스피어 / 라즈베리 파이  (0) 2014.01.02
USB2LPT for JTAG  (0) 2013.06.21
Hi-Z / Tristate / 플로트(float)  (0) 2013.01.02
keil 에서 inline 함수 사용하기  (0) 2012.04.21
Posted by 구차니
embeded2012. 4. 21. 13:47
inline 키워드가 아니라
__inline 키워드로 하면된다 -_-

[링크 : http://www.keil.com/support/man/docs/c166/c166_le_inlinefuncs.htm]

'embeded' 카테고리의 다른 글

Z80 M6800  (0) 2014.01.27
기즈모 스피어 / 라즈베리 파이  (0) 2014.01.02
USB2LPT for JTAG  (0) 2013.06.21
Hi-Z / Tristate / 플로트(float)  (0) 2013.01.02
KEIL 컴파일러 종류  (0) 2012.04.21
Posted by 구차니
embeded/ARM2012. 4. 19. 22:48
이상하게 RTCSet만 하려고 하면 시스템이 멈추는 문제가 발생해서
driverlib 소스를 뒤져봐도 딜레이 주는것 외에는 딱히 문제가 없어 보이는데
뒤지다 뒤지다 뒤져도 답이 안나온다 -_-


일단 hibernate mode로 항상 들어가게 해놓고
분기조건으로 어떻게 할지를 안해줘서 그런걸려나?

[링크 : http://e2e.ti.com/support/microcontrollers/stellaris_arm_cortex-m3_microcontroller/f/471/t/183421.aspx]
Posted by 구차니
embeded/ARM2012. 4. 19. 19:31
KEIL로 컴파일 하면 아래와 같은 문구가 나오고
 Program Size: Code=34744 RO-data=11400 RW-data=1344 ZI-data=9872

의미는 아래와 같다.
1. ZI Data: Zero Initialized Data

2. RO Data are the constants.
Total
RAM Size = RW Data + ZI Data
Total ROM Size = Code + RO Data + RW Data

3. Some constants (RO data) are generated by the compiler/linker and might also be from libraries. So they will exist regardless that your program doesn't explicitly defines any constants. 

[링크 : http://www.keil.com/forum/10624/


글 완전 날로먹은듯? ㅋㅋㅋ

'embeded > ARM' 카테고리의 다른 글

TI DM368와 H-JTAG(실패)  (0) 2013.06.28
HibernateRTCSet  (0) 2012.04.19
타이머 핸들러 시간 충돌 안나게 조절하기?  (0) 2012.04.13
ti lm3s 시리즈 하이버네이트 모드 + RTC 사용하기  (2) 2012.04.04
TI LM3S1607 time epoch  (0) 2012.03.27
Posted by 구차니
embeded/ARM2012. 4. 13. 11:14
엑셀을 이용한 꽁수.
아무튼 100ms 250ms 500ms 1000ms 4개를 돌리는데
아무래도 한시간에 몰아치기 하면 시간 정확도도 떨어지고 그럴테니
최대한 분산해주려고 해도 이정도 밖에 못하겠네 ㅠ.ㅠ

void Timer0A_Handler(void)		// Timer0A - internal timer
{
	TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT);

	count_10ms++;

	if ((count_10ms + 75) %  100 == 0)		{TimeService_100ms();}
	if ((count_10ms +  1) %  250 == 0)		{TimeService_250ms();}
	if ((count_10ms + 50) %  500 == 0)		{TimeService_500ms();}
	if ((count_10ms + 25) % 1000 == 0)		{TimeService_1000ms();	count_10ms = 0;}
}



'embeded > ARM' 카테고리의 다른 글

HibernateRTCSet  (0) 2012.04.19
KEIL Program Size 항목별 의미  (0) 2012.04.19
ti lm3s 시리즈 하이버네이트 모드 + RTC 사용하기  (2) 2012.04.04
TI LM3S1607 time epoch  (0) 2012.03.27
H-JTAG 에러이유?  (0) 2012.03.23
Posted by 구차니
embeded/ARM2012. 4. 4. 10:04
stellarisware를 설치하면 기본적으로 추가되는 예제를 추려내서 테스트 해보면 되는데,
대부분의 장비들이 굳이 하이버네이트 모드로 들어가는 행동을 취할수 없을때가 있다.
항상 켜져있어야 하는 장비인데, 언제꺼질지 모르지만 시간은 유지해야 한다면
하이버네이트 모드를 들어갈수 있는 시점을 정할수 없기 때문에 항상 하이버네이트 모드를 켜주면 된다.

C:\StellarisWare\boards\ek-lm3s1968\hibernate\hibernate.c
파일을 참고해서 추려내자면
static void SetRTCFucntion(void)
{
//	time_t current_time;
//	struct tm struct_time = { 0, 0, 10, 26,2,2012 - 1900,0,0,0};
//	current_time = mktime(&struct_time);
	
	SysCtlPeripheralEnable(SYSCTL_PERIPH_HIBERNATE);
		HibernateEnableExpClk(SysCtlClockGet());
		HibernateClockSelect(HIBERNATE_CLOCK_SEL_DIV128);
		HibernateRTCEnable();
//		HibernateRTCSet(current_time);
		HibernateWakeSet(HIBERNATE_WAKE_PIN);
		HibernateRequest();
}

일단 RTC를 사용하려면 무조건 하이버네이트 장치를 사용하도록 해야한다.
    SysCtlPeripheralEnable(SYSCTL_PERIPH_HIBERNATE);

하이버네이트 모듈에 들어갈 클럭을 지정해주는데, 32.768Khz가 들어가거나 4.194304Mhz를 /128 해서 넣어주도록 한다.
    HibernateEnableExpClk(SysCtlClockGet());
    HibernateClockSelect(HIBERNATE_CLOCK_SEL_DIV128); // 4.194304 Mhz input divider to 32.768kHz

 하이버네이트 모듈에 내장된 RTC 를 사용하도록 설정하고
    HibernateRTCEnable(); 

원인은 알수 없지만 wakeup 조건을 반드시 설정해 주어야 하이버네이트 모드가 작동한다.
WAKE 핀은 NC 처리해도 작동에 이상은 없는듯 하다.
    HibernateWakeSet(HIBERNATE_WAKE_PIN); 

마지막으로 하이버네이트 모드를 들어가도록 요청한다.
    HibernateRequest(); 


RTC 시간은 배터리가 소진된 시점의 마지막 시간이 다음 부팅시까지 유지된다.

'embeded > ARM' 카테고리의 다른 글

KEIL Program Size 항목별 의미  (0) 2012.04.19
타이머 핸들러 시간 충돌 안나게 조절하기?  (0) 2012.04.13
TI LM3S1607 time epoch  (0) 2012.03.27
H-JTAG 에러이유?  (0) 2012.03.23
KEIL MDK(ARM)에 H-JTAG 사용하기  (0) 2012.03.23
Posted by 구차니
embeded/ARM2012. 3. 27. 16:38

실험적으로 1900인건 찾았는데 음..

일단 아래의 메뉴얼은 deprecated 된 녀석이라 현재 버전의 stellarisware에는 존재하지 않는 내용이고

[링크 : http://www.ti.com/lit/ug/spmu063/spmu063.pdf]


KEIL MDK에서 epoch 관련 검색을 해보고는 있지만 딱히 눈에 띄지 않고 있다.

그나저나 이런 epoch가 라이브러리 차이라면..

MDK냐 code sorcery냐 codered 냐에 따라서도 다를수 있다는 의미이려나?


2012/03/27 - [Linux] - localtime() 과 mktime()을 이용하기


Posted by 구차니
embeded/ARM2012. 3. 23. 10:16
리셋이 안된다고 배째는데
아무튼 TAP 값은 맞으니까 칩 종류를 받아오는 것일테고 -_-
의심이 가는건 nTRST 연결 상태?

  • nSRST bi-directional (open collector)
    This pin serves two purposes. It can be used by the adapter to reset the target board, which is most useful during remote debugging. Furthermore, the adapter is able to detect that the reset is triggered on the target by another event, like pressing the reset button or a watchdog timeout.
  • nTRST from adapter to target
    According to the JTAG standard, the TAP controller is reset to a known state by keeping TMS high for five consecutive TCK cycles. However, some targets have problems with this sequence and thus require a hardware reset, which is marked optional in the IEEE specification. On several chips, like the AT91R40008 used on Ethernut 3, nSRST and nTRST are internally tied together. The disadvantage with this design is, that you can’t trigger a breakpoint immediately after a target hardware reset. If this signal is not used on the target, it is recommended to pull up this line with 10kOhm.
[링크 : http://www.jtagprogrammer.com/jtag-signals/]
2010/06/26 - [embeded/ARM] - ARM JTAG - Wiggler 14pin , 20pin pinout

arm 설명에서는 반드시있을 이유는 없지만, 하는걸 권장한다고 한다.
2012/03/23 - [embeded/ARM] - KEIL MDK(ARM)에 H-JTAG 사용하기

[링크 : http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka3887.html]
    [링크 : http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka3894.html] nTRST 
    [링크 : http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka3895.html] nSRST

nTRST는 Target ReSeT 인거 같은데
nSRST는 무슨 리셋이려나? 
Posted by 구차니