embeded/ARM2014. 4. 19. 23:53
thumb
32bit ARM 프로세서에서 16bit 명령어를 지원하는 기능이다.
일단 32bit 명령어는 말그대로.. 명령어 자체가 4byte인거고
RISC 특성상 명령어가 넘쳐나기 때문에 명령어 길이를 줄여 바이너리 크기를 줄이기 위한 방법으로 제공된다.
또한 thumb 사용시 데이터버스를 16bit로 사용하기 때문에
32bit 버스를 구성하지 않아도 되어 데이터버스를 회로 구성에도 잇점이 생긴다.

1994년 릴리즈된 ARM7TDMI 부터 지원되며 CPU 모델상에 T가 들어갈경우 Thumb를 지원한다.

[링크 : http://skyul.tistory.com/54]
[링크 : http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0210c/CACBCAAE.html]
[링크 : http://en.wikipedia.org/wiki/ARM_architecture]


Jazelle는 
Java의 꿈이었던 Java Bytecode CPU라고 해야하나?
CPU에서 Native ByteCode를 95% 정도 지원하고 나머지는VM 으로 처리하는 방식으로
ARMv5TEJ 부터 지원하고 J가 자바지원을 의미한다.

아무튼... 안드로이드가 좀 빨라진 이유중에 하나가
Cortex-A8/A9에서 Jazelle의 후속 기술인 ThumbEE를 지원하면서 JIT 가속(?)을 받아서가 아닐까?
 Jazelle DBX (Direct Bytecode eXecution) allows some ARM processors to execute Java bytecode in hardware as a third execution state alongside the existing ARM and Thumb modes. Jazelle functionality was specified in the ARMv5TEJ architecture and the first processor with Jazelle technology was the ARM926EJ-S. Jazelle is denoted by a 'J' appended to the CPU name, except for post-v5 cores where it is required (albeit only in trivial form) for architecture conformance.
 Jazelle RCT (Runtime Compilation Target) is a different technology and is based on ThumbEE mode and supports ahead-of-time (AOT) and just-in-time (JIT) compilation with Java and other execution environments.

Instead, the Thumb Execution Environment (ThumbEE) is now preferred. Support for this is mandatory in ARMv7-A processors (such as the Cortex-A8 and Cortex-A9), and optional in ARMv7-R processors. ThumbEE targets compiled environments, perhaps using JIT technologies. It is not at all specific to Java, and is fully documented; much broader adoption is anticipated than Jazelle was able to achieve.

[링크 : http://en.wikipedia.org/wiki/Jazelle ] 

[링크 : http://www.arm.com/products/processors/technologies/jazelle.php]

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

Freescale Multimedia framwork  (0) 2014.09.17
freescale i.mx283 / i.mx515  (0) 2014.08.19
SSI - Synchronous Serial Interface  (0) 2013.12.18
ubuntu gcc-arm 패키지 목록  (0) 2013.08.31
jtag tap - Test Access Port  (0) 2013.07.05
Posted by 구차니
embeded/ARM2013. 12. 18. 01:21
LC1628 내용을 보려다가 뜬금없이 LM3S1968 킷트의
128x96 OLED 내용을 먼저 보고 분석을 하려고 해쓴데
EVB에서 SSI 관련 내용이 보여서 찾아보니.. 대단한건 아니고
2핀으로 장거리 전송을 하고 CLK와 DATA를 sync 시켜 보내는 방법

즉, 데이터를 패러럴이 아닌 시리얼로 보내기에 핀수를 줄일수 있는 장점이 있다.
아무튼.. OLED던 CLCD던 데이터 전송시 SSI 를 이용한다면
하드웨어 적으로 SSI를 제공하는 Stellaris에서 굳이 마다할 필요는 없을듯


SSI is based on RS-422[1] standards
[링크 : http://en.wikipedia.org/wiki/Synchronous_Serial_Interface]

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

freescale i.mx283 / i.mx515  (0) 2014.08.19
ARM thumb과 Jazelle  (0) 2014.04.19
ubuntu gcc-arm 패키지 목록  (0) 2013.08.31
jtag tap - Test Access Port  (0) 2013.07.05
H-JTAG에서 pxa255 + 28F128J 읽어오기(실패중)  (0) 2013.07.03
Posted by 구차니
embeded/ARM2013. 8. 31. 17:11
심심해서 arm용 컴파일러가 어떤데 있나 찾아 봤는데
armel과 armhf 이라는게 있어서 검색!

ARM EABI Little-endian, a software port of Linux to the ARM architecture, contrasted with armhf
ARM hard float refers to an ARM architecture with the additional floating point hardware Vector Floating Point (VFP).
[링크 : http://en.wikipedia.org/wiki/Armel]
[링크 : http://en.wikipedia.org/wiki/Armhf]

$ sudo apt-cache search arm | grep gcc
gcc-4.4-arm-linux-gnueabi - GNU C compiler
gcc-4.4-arm-linux-gnueabi-base - GCC, the GNU Compiler Collection (base package)
gcc-4.4-arm-linux-gnueabihf - GNU C compiler
gcc-4.4-arm-linux-gnueabihf-base - GCC, the GNU Compiler Collection (base package)
gcc-4.5-arm-linux-gnueabi - The GNU C compiler
gcc-4.5-arm-linux-gnueabi-base - The GNU Compiler Collection (base package)
gcc-4.5-arm-linux-gnueabihf - The GNU C compiler
gcc-4.5-arm-linux-gnueabihf-base - The GNU Compiler Collection (base package)
gcc-4.6-arm-linux-gnueabi - GNU C compiler
gcc-4.6-arm-linux-gnueabi-base - GCC, the GNU Compiler Collection (base package)
gcc-4.6-arm-linux-gnueabihf - GNU C compiler
gcc-4.6-arm-linux-gnueabihf-base - GCC, the GNU Compiler Collection (base package)
gcc-4.6-multilib-arm-linux-gnueabi - GNU C compiler (multilib files)
gcc-4.6-multilib-arm-linux-gnueabihf - GNU C compiler (multilib files)
gcc-arm-linux-gnueabi - The GNU C compiler for armel architecture
gcc-arm-linux-gnueabihf - The GNU C compiler for armhf architecture
libgcc1-armel-cross - GCC support library
libgcc1-armhf-cross - GCC support library
libgcc1-dbg-armel-cross - GCC support library (debug symbols)
libgcc1-dbg-armhf-cross - GCC support library (debug symbols)
libhfgcc1-armel-cross - GCC support library (hard float ABI)
libhfgcc1-dbg-armel-cross - GCC support library (debug symbols)
libsfgcc1-armhf-cross - GCC support library (soft float ABI)
libsfgcc1-dbg-armhf-cross - GCC support library (debug symbols)



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

ARM thumb과 Jazelle  (0) 2014.04.19
SSI - Synchronous Serial Interface  (0) 2013.12.18
jtag tap - Test Access Port  (0) 2013.07.05
H-JTAG에서 pxa255 + 28F128J 읽어오기(실패중)  (0) 2013.07.03
ARM EABI / OABI  (0) 2013.07.02
Posted by 구차니
embeded/ARM2013. 7. 5. 08:01

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

SSI - Synchronous Serial Interface  (0) 2013.12.18
ubuntu gcc-arm 패키지 목록  (0) 2013.08.31
H-JTAG에서 pxa255 + 28F128J 읽어오기(실패중)  (0) 2013.07.03
ARM EABI / OABI  (0) 2013.07.02
TI DM368와 H-JTAG(실패)  (0) 2013.06.28
Posted by 구차니
embeded/ARM2013. 7. 3. 10:35
주소가 잘못되었나 id가 잘못되었나 멘붕중...
일단 RedBoot에서는 
0x00000000 0x04000000 0xa0000000 전부 동일한 내용이 읽힌다.

아마도
0x00000000은 플래시 메모리 이고
0xA0000000은 메모리에 맵핑된 플래시 메모리의 영역일 것 같고
0x04000000은 머지?

음.. 다시 합당한 걸로 추론을 해보면
0x00000000은 RAM
0x04000000은 MMIO로 연결된 FLASH 영역?
0xA0000000은 FLASH


RedBoot> version

RedBoot(tm) bootstrap and debug environment [ROM]
Non-certified release, version UNKNOWN - built 17:44:04, Apr 16 2003

Platform: COGENT (XScale)
Copyright (C) 2000, 2001, Red Hat, Inc.

RAM: 0xa0000000-0xa2000000, 0xa0012fb8-0xa1ebf000 available
FLASH: 0x04000000 - 0x06000000, 128 blocks of 0x00040000 bytes each.

RedBoot> ldrh 0xa0000000
0x    f018 from 0xa0000000

RedBoot> ldrh 0x00000000
0x    f018 from 0x       0

RedBoot> ldrh 0x04000000
0x    f018 from 0x 4000000

RedBoot> ldrh 0x0000000f
0x    e59f from 0x       e

RedBoot> ldrh 0xa000000f
0x    e59f from 0xa000000e

RedBoot> ldrh 0x0400000f
0x    e59f from 0x 400000e 

2013/07/02 - [하드웨어/PalmPalm Tynux Box] - tynuxbox X와 H-JTAG (wiggler / parallel)
2013/07/03 - [하드웨어/PalmPalm Tynux Box] - palmpalm = PXA255 + Intel 28F128J3


일단 이건.. H-JTAG에서 사용하는 초기화 파일로
모델이 조금 다른 28F320J3 용이다. (4MB NOR)


일단 16bit 1chip 으로 16bit band width 인거 같고..
Flash address가 0x10000000 으로 RAM 보다 뒤에 시작한다.


대망(?)의 Init Script 인데.. 음.. 부디 28F128J3 에도 적용이 되길 ㅠㅠ


RESET과 VERIFICATION이 추가 되었다.


파일 내용은 아래와 같다.
FLASH SECTION:
INTEL
28F320J3
MEMORY SECTION:
16-BIT X 1-CHIP
0x10000000
0x00300000
XTAL SECTION:
NULL
TCK SECTION:
0
0
SCRIPT SECTION:
SysReset+++//Rest system
SetMem+32-Bit+0xFFFFFD44+0x00008000//Disable watchdog
SetMem+32-Bit+0xFFFFFC20+0x00000801//Enable main oscillator
Delay+++25//wait for main osc stable
SetMem+32-Bit+0xFFFFFC28+0x206D9F09//Setup PLL A
SetMem+32-Bit+0xFFFFFC2C+0x20A21F0F//Setup PLL B
Delay+++25//wait for PLL stable
SetMem+32-Bit+0xFFFFFC30+0x00000102//Select PLL A as clock source
Delay+++100//wait for system stable
SetMem+32-Bit+0xFFFFE400+0x02020202//SMC_SETUP
SetMem+32-Bit+0xFFFFE404+0x0D0D0D0D//SMC_PULSE
SetMem+32-Bit+0xFFFFE408+0x00100010//SMC_CYCLE
SetMem+32-Bit+0xFFFFE40C+0x00041003//SMC_MODE
PGMOPTION SECTION:
ENABLE_RESET
ENABLE_VERIFICATION2
ADDON SECTION:
 
[INIT_TRITON_RAM]
memory write 0x48000008 0x12DC24D8          ; MSC0 = 0x26F226F2
memory read 0x48000008                      ; read MSC0
memory write 0x4800000C 0x7FF07FF0          ; MSC1 = 0x3FF4A441
wait  10
memory write 0x48000010 0x7FF07FF0          ; MSC2 = 0x00007FF0
wait  10
memory write 0x48000004 0x00000018          ; MDREFR = 0x00000018
memory write 0x4800001C 0x00000000          ; SXCNFG = 0x00000000
memory write 0x48000004 0x00010018          ; MDREFR = 0x00010018
wait  10
memory write 0x48000004 0x0009C030          ; MDREFR = 0x000BC018
memory write 0x48000000 0x00000AA8          ; MDCNFG = 0x00000AA8
wait  100
memory write 0x48000000 0x00000AAD          ; MDCNFG = 0x00000AA9
memory write 0x48000040 0x00220032          ; MDMRS = 0x00220032

[FLASH_28F128J3A]
; auto detect 28F128J3(A) or 28F128P30B
CHIP                    = 28F128J3(A)       ; flash chip
CHIP                    = 28F128P30B        ; flash chip
ACCESS_METHOD           = AUTO              ; program method auto
CHECK_ID                = YES               ; check chip ID
CHIP_WIDTH              = 16                ; chip is in 16 bit configuration
CHIP_COUNT              = 1                 ; one chip is used
BASE_ADDR               = 0                 ; chip is mapped at 0x0000000
FILE                    = "myfile.bin", BIN, 0 ; file to program
AUTO_ERASE              = NO                ; erase before program
AUTO_LOCK               = NO                ; lock after program
 
[링크 : http://download.ronetix.info/peedi/cfg_examples/xscale/pxa255.cfg] 

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

ubuntu gcc-arm 패키지 목록  (0) 2013.08.31
jtag tap - Test Access Port  (0) 2013.07.05
ARM EABI / OABI  (0) 2013.07.02
TI DM368와 H-JTAG(실패)  (0) 2013.06.28
HibernateRTCSet  (0) 2012.04.19
Posted by 구차니
embeded/ARM2013. 7. 2. 16:08
arm-linux-gcc 이런거 대신에 언젠가 부터 야곰야곰 arm-eabi-gcc 이런게 보이길래 검색..
(cortex-m3 에서도 우연히(!) 보게 된적은 있지만..)


확실하게 어떤 건진 모르겠고
ELF와 같은 바이너리 호환을 위한 컨테이너 같은데
ARMv5 ARMv7 이런식으로 ARM 아키텍쳐도 여러가지이니
이러한 ARM 프로세서들에 대한 바이너리 호환성을 위해서 만든것 같다.


기존의 ABI를 OABI로
신형 ABI를 EABI로 규정

[링크 : http://en.wikipedia.org/wiki/Application_binary_interface]
[링크 : http://wiki.debian.org/ArmEabiPort

[링크 : http://kldp.org/node/82715]
[링크 : http://iprinceps.egloos.com/610936]
[링크 : http://forum.falinux.com/zbxe/index.php?document_srl=574604]
 

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

jtag tap - Test Access Port  (0) 2013.07.05
H-JTAG에서 pxa255 + 28F128J 읽어오기(실패중)  (0) 2013.07.03
TI DM368와 H-JTAG(실패)  (0) 2013.06.28
HibernateRTCSet  (0) 2012.04.19
KEIL Program Size 항목별 의미  (0) 2012.04.19
Posted by 구차니
embeded/ARM2013. 6. 28. 15:50
핀을 연결하는데 EMU0/EMU1 설정값 문제인지 되질 않는다 -_-

전원을 연결하면 이렇게 인식을 못하고


전원을 뽑으면 이렇게 미묘하게(?) 인식되는척 만 하고 -_-


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

H-JTAG에서 pxa255 + 28F128J 읽어오기(실패중)  (0) 2013.07.03
ARM EABI / OABI  (0) 2013.07.02
HibernateRTCSet  (0) 2012.04.19
KEIL Program Size 항목별 의미  (0) 2012.04.19
타이머 핸들러 시간 충돌 안나게 조절하기?  (0) 2012.04.13
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 구차니