embeded/ARM2012. 3. 23. 09:50
MDK with Wiggler parallel jtag

Step 1. H-JTAG을 설치하고 메뉴에서 ToolConf 를 실행한다.
           기본값대로 KEIL MDK를 설치했다면 "C:\Keil" 경로를 선택한다.


Step 2. Utilities 와 Debug 탭에서 Target Driver를 H-JTAG 으로 변경한다.



Step 3. H-JTAG를 실행하여 tray에 들어갔는지 확인한다.
          H-JTAG 프로그램을 실행하지 않은 상태라면 아래와 같은 에러가 발생한다.


Step 4. 굽는다.




그런데 회사에서 사용하는 보드가 JTAG 케이블이 잘못 연결되었는지
장치 인식은 되지만 TAP configuration을 확인하라면서 정작 구워지지는 않는다.


[링크 : http://www.hjtag.com/en/upimg/H-JTAG%20USER%20MANUAL%20(EN).rar]
2012/01/27 - [embeded/ARM] - Cortex-M3 LM3S1968 Evaluation board

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

TI LM3S1607 time epoch  (0) 2012.03.27
H-JTAG 에러이유?  (0) 2012.03.23
lm flash example  (0) 2012.03.13
TI LM3S 시리즈 특징 - hibernate module / non-volatile memory  (0) 2012.03.06
arm-linux-gcc 와 arm-elf-gcc의 차이점  (2) 2012.01.16
Posted by 구차니
embeded/ARM2012. 3. 13. 07:47
TI LM 시리즈(?)에서 플래시 EEPROM은 별도로 존재하지 않고
프로그램 영역의 write protect를 해제하고 프로그램이 없는 영역을 임의로
삭제/읽음으로서 EEPROM을 흉내낼수 있다.

읽는 방법은 0x0000 0000 에서 0x0001 FFFF 까지 (lm3s1607 기준 128KB FLASH)
포인터 변수를 이용하거나 직접 번지로 읽으면 된다.
*(0x00000000) 하면 bin 파일의 첫 글자인 0xB0가 보인다.

쓰는건 아직 안해봐서.. 패스?! ㅋㅋ

[링크 : http://irmus.tistory.com/entry/%EB%82%B4%EC%9E%A5-flash-%EB%A9%94%EB%AA%A8%EB%A6%AC]
[링크 : http://mycortex.springnote.com/pages/2110058 ] 
[링크 : http://www.withrobot.com/entry/myCortex-LM8962]
 
---
2012.3.27 추가
char Flash_read(unsigned int *addr, char *data, int len)
{	// addr - sizeof(char) addressing (1 byte width)
		memcpy(	data, addr, len);
}

char Flash_write(unsigned int *addr, char *data, int len)
{	//	addr - sizeof(long) addressing(4 byte width)
		FlashErase((unsigned long)addr);
		FlashProgram((unsigned long*)data, (unsigned long)addr, len);
}

char Flash_unProtect(unsigned int *addr)
{
	return FlashProtectSet((unsigned long)addr, FlashReadWrite);
}

char Flash_Protect(unsigned int *addr)
{
	return FlashProtectSet((unsigned long)addr, FlashReadOnly);
}

char Flash_Erase(unsigned int *addr)
{
	return FlashErase((unsigned long)addr); // & 0x0000FC00
}


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

H-JTAG 에러이유?  (0) 2012.03.23
KEIL MDK(ARM)에 H-JTAG 사용하기  (0) 2012.03.23
TI LM3S 시리즈 특징 - hibernate module / non-volatile memory  (0) 2012.03.06
arm-linux-gcc 와 arm-elf-gcc의 차이점  (2) 2012.01.16
winARM  (0) 2012.01.12
Posted by 구차니
embeded/ARM2012. 3. 6. 09:55
ATMEL AVR을 쓰면 EEPROM이 있어서 무언가 저장할 공간이 있었는데
TI LM3S 시리즈를 보니 스펙상으로는 EEPROM이 존재를 하지 않는다.
편법일수도 있고, 가능할진 모르겠지만, 256byte의 NV memory가 존재하니 대신 사용해도 될듯?

10 Hibernation Module
10.1 Introduction

The Hibernate API provides a set of functions for using the Hibernation module on the Stellaris
microcontroller. The Hibernation module allows the software application to cause power to be
removed from the microcontroller, and then be powered on later based on specific time or a signal
on the external WAKE pin. The API provides functions to configure wake conditions, manage
interrupts, read status, save and restore program state information, and request hibernation mode.
Some of the features of the Hibernation module are:

32-bit real time clock
Trim register for fine tuning the RTC rate
Two RTC match registers for generating RTC events
External WAKE pin to initiate a wake-up
Low-battery detection
64 32-bit words of non-volatile memory
Programmable interrupts for hibernation events
This driver is contained in driverlib/hibernate.c, with driverlib/hibernate.h containing the API definitions for use by applications.  


아무튼 NVRAM을 사용하기 위한 함수는 다음과 같다. 
void HibernateDataGet (unsigned long ∗pulData, unsigned long ulCount)
void HibernateDataSet (unsigned long ∗pulData, unsigned long ulCount) 

---
2012.3.7 추가


hibernate module이 없는 모델도 있으니 주의!

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

KEIL MDK(ARM)에 H-JTAG 사용하기  (0) 2012.03.23
lm flash example  (0) 2012.03.13
arm-linux-gcc 와 arm-elf-gcc의 차이점  (2) 2012.01.16
winARM  (0) 2012.01.12
ARM infocenter  (0) 2011.12.10
Posted by 구차니
embeded/AVR (ATmega,ATtiny)2012. 2. 20. 23:20
AVR 에서도 I2C는 open drain으로 구성되는데
i2c 기능을 사용하지 않고,  GPIO로 구성해서 i2c 통신을 할 경우에는
i2c 버스 풀업과 avr pin 내장 풀업으로 인해 모종의 문제가 발생하는 듯하다.

• INT1/SDA – Port D, Bit 1
INT1, External Interrupt source 1. The PD1 pin can serve as an external interrupt source to the MCU.
SDA, Two-wire Serial Interface Data: When the TWEN bit in TWCR is set (one) to enable the
Two-wire Serial Interface, pin PD1 is disconnected from the port and becomes the Serial Data
I/O pin for the Two-wire Serial Interface. In this mode, there is a spike filter on the pin to sup-
press spikes shorter than 50 ns on the input signal, and the pin is driven by an open drain driver
with slew-rate limitation.
 
•INT0/SCL – Port D, Bit 0
INT0, External Interrupt source 0. The PD0 pin can serve as an external interrupt source to the MCU.
SCL, Two-wire Serial Interface Clock: When the TWEN bit in TWCR is set (one) to enable the
Two-wire Serial Interface, pin PD0 is disconnected from the port and becomes the Serial Clock
I/O pin for the Two-wire Serial Interface. In this mode, there is a spike filter on the pin to sup-
press spikes shorter than 50 ns on the input signal, and the pin is driven by an open drain driver
with slew-rate limitation. 

Electrical Interconnection
As depicted in Figure 86, both bus lines are connected to the positive supply voltage through
pull-up resistors. The bus drivers of all TWI-compliant devices are open-drain or open-collector.
This implements a wired-AND function which is essential to the operation of the interface. A low
level on a TWI bus line is generated when one or more TWI devices output a zero. A high level
is output when all TWI devices tri-state their outputs, allowing the pull-up resistors to pull the line
high. Note that all AVR devices connected to the TWI bus must be powered in order to allow any bus operation. 
The number of devices that can be connected to the bus is only limited by the bus capacitance
limit of 400 pF and the 7-bit slave address space. A detailed specification of the electrical char-
acteristics of the TWI is given in “Two-wire Serial Interface Characteristics” on page 322. Two
different sets of specifications are presented there, one relevant for bus speeds below 100 kHz,
and one valid for bus speeds up to 400 kHz. 

'embeded > AVR (ATmega,ATtiny)' 카테고리의 다른 글

attiny2313과 함께하는 지랄같은 주말 -_-  (0) 2013.06.29
0으로 나누면 어떻게 될까?  (0) 2012.07.04
AVR ISP 핀 순서  (0) 2012.01.22
AVT FFT + DAC = 보청기?  (0) 2012.01.18
AVR TWI 예제  (0) 2012.01.11
Posted by 구차니
embeded/Cortex-M3 Ti2012. 2. 20. 21:19
어떤 i2c 칩이랑 avr이랑 통신하려니 안되서 ti 칩으로 바꾸고 나니 잘되는데 -_-
이제야 와서 이유를 찾아보게 되는데..

TI 칩에서 I2C로 Alternative Function을 사용하게 되면 open drain으로 설정되는데, 
아마도 AVR atmel 은 pull-up이 되면서 모종의 문제가 발생하는 듯하다.

 When using the I2C module, in addition to configuring the pin to open drain, the GPIO Alternate Function Select (GPIOAFSEL) register bits for the I2C clock and data pins should be set to 1 (see examples in “Initialization and Configuration” on page 185).  

15.2 Functional Description
Each I2C module is comprised of both master and slave functions which are implemented as separate peripherals. For proper operation, the SDA and SCL pins must be connected to bi-directional open-drain pads. A typical I2C bus configuration is shown in Figure 15-2 on page 399. See “Inter-Integrated Circuit (I2C) Interface” on page 546 for I2C timing diagrams. 

[링크 : http://cooa.tistory.com/entry/20030676476]
Posted by 구차니
embeded/Cortex-M3 Ti2012. 2. 5. 22:08
driverlib 관련 분석 내용 / uart 예제사용
전반적으로 초기화 설정을 보면 무언가.. 중복되도록 설정하는 느낌?
특히 UART의 경우에는 몇단계를 통해서 설정을 하는 것을 보면...

함수설명
extern void SysCtlClockSet(unsigned long ulConfig); // 클럭설정을 하도록 함.
 

extern void SysCtlPeripheralEnable(unsigned long ulPeripheral); // 포트를 사용하도록 설정함
extern void GPIOPinConfigure(unsigned long ulPinConfig); // GPIO로 쓸지 하드웨어 내장 기능을 쓸지 설정함

extern void GPIOPinTypeGPIOInput(unsigned long ulPort, unsigned char ucPins); // 해당 포트의 해당핀을 입력용으로 설정
extern void GPIOPinTypeGPIOOutput(unsigned long ulPort, unsigned char ucPins); // 해당 포트의 해당핀을 출력용으로 설정
extern void GPIOPadConfigSet(unsigned long ulPort, unsigned char ucPins, unsigned long ulStrength, unsigned long ulPadType);
                                                                                  // 해당 포트의 해당핀에 대한 GPIO 드라이브 전류와 pull-up / open-drain 설정
 

예제설명
int main(void)
{
    char cThisChar;

    // 시스템 클럭설정
    SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);
    // UART0 기능을 사용하도록 함
    SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
    // UART 핀이 포함된 GPIOA 포트를 사용하도록 함
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
    // GPIO A의 0번 핀을 U0 RX로 사용하도록 함
    GPIOPinConfigure(GPIO_PA0_U0RX);
    // GPIO A의 1번 핀을 U0 TX로 사용하도록 함
    GPIOPinConfigure(GPIO_PA1_U0TX);
    // GPIO A의 0번 1번 핀을 UART에 할당함
    GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
    // UART의 클럭소스와 Baudrate등을 설정함
    UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 115200,
                       (UART_CONFIG_WLEN_8|UART_CONFIG_STOP_ONE|UART_CONFIG_PAR_NONE));
    do
    {
        // UART0로 부터 1문자를 받아옴(blocking 방식)
        cThisChar = UARTCharGet(UART0_BASE);
        // 받아온 문자을 UART0로 출력함
        UARTCharPut(UART0_BASE, cThisChar);
    } while((cThisChar != '\n') && (cThisChar != '\r'));

    return(0);
}

'embeded > Cortex-M3 Ti' 카테고리의 다른 글

uart 인터럽트 / 폴링 충돌  (0) 2012.06.18
Ti lm3s1968 arm cortex m3 i2c  (0) 2012.02.20
Cortex-M3 인터럽트 관련 문서  (0) 2012.01.31
Cortex-M3 예제소스  (0) 2012.01.27
Cortex-M3 LM3S1968 Evaluation board  (0) 2012.01.27
Posted by 구차니
embeded/Cortex-M3 Ti2012. 1. 31. 17:32
으헝헝 이런걸 찾고 있었던 거야 ㅠ.ㅠ

아무튼 중요한 내용은,
Cortex-M3 계열은 인터럽트 발생후 리셋하지 않기 때문에 수동으로 리셋을 해주어야 한다는 점인듯?


[링크 : http://skean.tistory.com/34]
[링크 :  http://eoworld.tistory.com/entry/LM3S8962-interrupt ]
  [링크 : http://www.cyworld.com/gooble/4856690] << 원본?

'embeded > Cortex-M3 Ti' 카테고리의 다른 글

Ti lm3s1968 arm cortex m3 i2c  (0) 2012.02.20
TI stellarisware / driverlib 기본설정 (uart예제)  (4) 2012.02.05
Cortex-M3 예제소스  (0) 2012.01.27
Cortex-M3 LM3S1968 Evaluation board  (0) 2012.01.27
ARM Cortex-M3 ISR 등록 방법  (0) 2012.01.20
Posted by 구차니
embeded/Cortex-M3 Ti2012. 1. 27. 19:49
Driverlib 사용하는 방법과 핀을 직접 설정하는 예제비교이다.

원래 stellarisware에는 핀을 직접 설정하는 blinky 라는 예제가 있고
그걸 어떤 분이 driverlib을 사용하는 방식으로 변경한 소스이다.

(물론 작동은 안될지도?)

[링크 : http://e2e.ti.com/support/microcontrollers/stellaris_arm_cortex-m3_microcontroller/f/471/t/123089.aspx]
Posted by 구차니
embeded/Cortex-M3 Ti2012. 1. 27. 10:53
제목이 모호하지만 기분탓으로 넘기고

일단 H-JTAG
LM Flash Programmer
MDK(KEIL) 을 이용한 플래시 read/write 관련 내용이라고 요약!

H-JTAG LPT를 이용한 READ
주의 : Evaluation board가 hibernate 모드면 못 읽어옴. 보드가 살아있는지 확인할 것!
보충 : USB 로 연결되어도 문제는 없음

Step 1. Settings - USB/LPT Selection - LPT 선택하고
           아래와 같이 장비명이 UNKNOWN에서 CORTEX-M3로 바뀌면 정상인식!


Step 2. F 아이콘 눌러 Flasher를 실행, 칩을 선택한다.
          칩모델은 LUMINARY - LMS1968


Step 3. Ext XTAL은 몰라서 그냥 1Mhz로 찍고(어짜피 1 이하로 입력하면 배쨈 -_-)
           INIT / PGM TCK는 그냥 안전빵으로 125KHz로 설정 


Step 4. 가장 아래의 칩 아이콘 눌러주고(Entire Chip 아이콘) Read를 눌러 파일로 저장!


Step 5. 만약 보드가 hibernate 모드라면 아래와 같은 에러가 발생한다.


          정상적으로 연결되었다면, 아래와 같이 읽어옴!


MDK를 이용한 USB 시리얼 JTAG
주의 : 읽어 오는것에 대한 설정은 없음.
보충 : 아직 안써봤음 -_-

Step 1. Stellaris ICDI 로 선택하고 Settings 누르면 


Step 2. 정상적으로 FTDI 드라이버가 설치 되어 있다면, 아래와 같이 Attached Devices에 뜨게 된다.


LM Flash Programmer - USB 를 이용한 ERASE / WRITE
주의 : Evaluation board에 패러럴과 USB JTAG 둘다 연결되면 인식을 못함
보충 : -

Step 1. LM3S1968 Evaluation Board로 설정


Step 2. 위에서 빼낸 bin 파일 선택하고 Program 누르면 3초 정도 내에 구워진 기분?


Step 3. Erase는 1초도 안걸린 기분?
---
2012.1.28 추가
"Upload Flash Contents to a .bin file" 에 파일 이름을 적고 entire Flash를 눌러준후 Upload를 누르면 파일로 저장된다.
---


Step 4. 이건 아직 쓸데 없는듯?


머.. 겁나서 읽어서 쓰기도 손이 덜덜덜 ㅠ.ㅠ
안에 들어있는거 날아가면 어떡해 ㅠ.ㅠ
막 이러면서 쑈함 -_-
Posted by 구차니
embeded/AVR (ATmega,ATtiny)2012. 1. 22. 21:12
매번 헷갈리는게 이 핀이 위에서 보는건지 아래서 보는건지 알수가 없다는거 -_-
아무튼, 여러개를 동시에 보니 항상 같은 배열이고, 5번 쪽에 구멍이 뚫린것을 봐서는
보드 기준 위에서 아래로 내려다 보고 만든 핀 배열인 것으로 생각이 된다.
만약 커넥터측의 회로를 만들어서 떔질을 한다면 아래에서 위로 보고 좌우가 뒤집히게 결선을 해야 할려나?



[링크 : http://www.us-technology.co.kr/product/doc/isp.pdf]

 

----
조립되어 있는(?) 케이블들을 보니 커넥터의 방향을 동일한 쪽으로 해주었다.
아~ 별거 아니지만 이렇게 연장을 하는거구나 라는걸 깨달은 바보 같은 구차니군 ㅠ.ㅠ

 

'embeded > AVR (ATmega,ATtiny)' 카테고리의 다른 글

0으로 나누면 어떻게 될까?  (0) 2012.07.04
AVR ATmega128 i2c  (0) 2012.02.20
AVT FFT + DAC = 보청기?  (0) 2012.01.18
AVR TWI 예제  (0) 2012.01.11
AVR EEPROM / CODE section 관련  (0) 2012.01.03
Posted by 구차니