<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>NTREXGO - 디바이스마트, 엔티렉스 컨텐츠 통합 사이트 &#187; applicationes</title>
	<atom:link href="http://www.ntrexgo.com/archives/tag/applicationes/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ntrexgo.com</link>
	<description>엔티렉스, 디바이스마트 컨텐츠 통합 사이트</description>
	<lastBuildDate>Thu, 03 Mar 2022 06:47:11 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>[18호]JK전자와 함께하는 ARM 완전정복(4)-1</title>
		<link>http://www.ntrexgo.com/archives/13612</link>
		<comments>http://www.ntrexgo.com/archives/13612#comments</comments>
		<pubDate>Fri, 10 May 2013 02:37:10 +0000</pubDate>
		<dc:creator>디바이스마트 매거진</dc:creator>
				<category><![CDATA[디바이스마트 매거진]]></category>
		<category><![CDATA[특집]]></category>
		<category><![CDATA[18호]]></category>
		<category><![CDATA[applicationes]]></category>
		<category><![CDATA[arm]]></category>
		<category><![CDATA[jk전자]]></category>
		<category><![CDATA[매거진]]></category>

		<guid isPermaLink="false">http://www.ntrexgo.com/?p=13612</guid>
		<description><![CDATA[디바이스마트매거진 18호 &#124; ARM Architecture 강의에서는 특정 CPU(S3C2440, STM32Fxx) 에 대한 내용 보다는 ARM Core의 이론적인 구조 자체에 대해서 많은 설명을 하였습니다. 이번 강의에서는 Samsung의 ARM9 CPU S3C2440 개발보드를 이용해서 실제 실습을 통해서 ARM에 대해서 공부해 보도록 하겠습니다.]]></description>
				<content:encoded><![CDATA[<table style="width: 600px" border="0">
<tbody>
<tr>
<td><a href="http://www.ntrexgo.com/wp-content/uploads/2013/05/jk전자.jpg" rel="lightbox[13612]"><img class="alignnone  wp-image-13318" alt="jk전자" src="http://www.ntrexgo.com/wp-content/uploads/2013/05/jk전자-300x222.jpg" width="192" height="142" /></a></td>
<td><span style="color: #000080"><strong><span style="font-size: large">JK전자와 함/께/하/는 ARM 완전 정복</span></strong></span></p>
<p><span style="color: #666699"><strong><span style="line-height: 19px">Ⅱ.ARM Applications &#8211; 2부</span></strong></span></p>
<p>글 | JK전자</td>
</tr>
</tbody>
</table>
<p><span style="font-size: 13px;line-height: 19px">자료는 ARM을 처음 접하는 입문자로서 S/W 엔지니어 혹은 H/W 엔지니어를 대상으로 하였습니다. 처음에는 Cortex-M3 구조를 목표로 하였으나 전통적인 ARM(주로 ARM7, ARM9)의 구조에 대해서 먼저 이야기한 다음 Cortex-M3 구조에 대해서 하기로 마음을 고쳐 먹었습니다. Cortex-M3도 ARM 이기 때문에 전통적인 ARM의 구조에 대해서 잘 이해하고 Cortex-M3 구조와 비교해 보면서 공부한다면 큰 도움이 될 것입니다.</span></p>
<p>ARM Architecture 강의에서는 특정 CPU(S3C2440, STM32Fxx) 에 대한 내용 보다는 ARM Core의 이론적인 구조 자체에 대해서 많은 설명을 하였습니다. 이번 강의에서는 Samsung의 ARM9 CPU S3C2440 개발보드를 이용해서 실제 실습을 통해서 ARM에 대해서 공부해 보도록 하겠습니다.<br />
I. ARM Architecture ~ IV. Cortex-M3 Applications 까지 분명 쉽지 않은 지루하고도 먼 여행이 되겠지만 ARM을 공부하는 임베디드 관련 엔지니어라면 언젠가는 한 번은 넘어야 하는 산이라 생각됩니다. 부디 이 자료가 ARM을 정복하는데 조금이라도 도움이 되시길 바랍니다.</p>
<p>&nbsp;</p>
<p><span style="font-size: small;color: #f68412"><strong>강의 전체 로드맵</strong></span></p>
<p>I. ARM Architecture | 임베디드 시스템 개론에 대한 설명과 ARM7, ARM9 의 구조에 대해서 설명합니다.<br />
<span style="color: #808000"><strong>II. ARM Applications | 삼성의 S3C2440(ARM9) 개발보드(S3C2440 Mini 개발보드)를 이용해서 어셈블리어와 UART, GPIO 등을 실습합니다.</strong></span><br />
III. Cortex-M3 Architecture | Cortex-M3의 특징과 구조에 대해서 설명합니다.<br />
IV. Cortex-M3 Applications | STM32F103VCT6 Dragon 개발보드를 이용해서 GPIO, LCD, SPI, UART, MP3, SDIO, I2C 등을 실습합니다.</p>
<p>이 강의 자료에 대한 모든 질의사항은<a href="http://cafe.naver.com/avrstudio" target="_blank"> http://cafe.naver.com/avrstudio</a>의 ARM Architecture Q&amp;A게시판에 글을 남겨 주시거나 jk@deviceshop.net로 메일을 보내주시기 바랍니다. 가급적이면 여러 사람이 질문에 대한 답변을 공유할 수 있도록 네이버 카페 게시판을 이용해주셨으면 합니다. 감사합니다.</p>
<p><span style="font-size: small;color: #f68412"><strong>Ⅱ. ARM Applications 2부 목차</strong></span></p>
<p>5. S3C2440 개발보드 실습<br />
5.1 S3C2440 Startup 코드 분석<br />
5.2 GPIO Output(LED On/Off)<br />
5.3 GPIO Input(KEY Input) &#8211; Polling<br />
5.4 GPIO Input(KEY Input) &#8211; Interrupt<br />
5.5 TIMER<br />
5.6 PWM Buzzer<br />
5.7 UART</p>
<p>5장에서는 우리가 실습에 사용할 Mini2440 개발보드를 가지고 지금까지 이론으로만 공부했던 어셈블리어와 C언어를 이용해서 주변 장치들을 제어하는 실습을 해보도록 하겠습니다. 실제 타켓보드에 내가 작성한 프로그램을 다운로드하여 동작을 확인하는 일은 항상 가슴이 설레입니다.</p>
<p><span style="color: #0000ff"><strong>5. S3C2440 개발보드 실습</strong></span></p>
<p><span style="color: #3366ff"><strong>5.1 S3C2440 Startup 코드 분석</strong></span><br />
ARM 개발보드의 부트코드(Startup)에는 지금까지 이론으로 배웠던 내용들이 거의 모두 포함이 되어 있습니다. 부트 코드만 잘 분석해도 CPU의 50% 이상은 알고 있다고 해도 과언이 아닙니다. 부트코드 기능을 간략하게 요약해 보면 아래와 같습니다.</p>
<p>- Clock &amp; Power Initialization<br />
- Setup each exception handler<br />
- Memory (SDRAM) Initialization<br />
- Peripheral Initialization<br />
- Stack Initialization for each Processor Mode<br />
- Interrupt Handler Setup<br />
- Segment Initialization<br />
- Jump to User Application</p>
<p>이제부터 부팅이 되는 순서대로 실제 코드를 분석해 보도록 하겠습니다.</p>
<p><span style="background-color: #ffffff;color: #00ccff"><strong>(1) Exception Vector Table</strong></span></p>
<table style="border-collapse: collapse;width: 620px" border="1" cellspacing="0" cellpadding="10">
<tbody>
<tr>
<td><span style="color: #ff0000">__program_start</span><br />
<span style="color: #ff0000"> b ResetHandler</span><br />
<span style="color: #ff0000"> b HandlerUndef ;handler for Undefined mode</span><br />
<span style="color: #ff0000"> b HandlerSWI ;handler for SWI interrupt</span><br />
<span style="color: #ff0000"> b HandlerPabort ;handler for PAbort</span><br />
<span style="color: #ff0000"> b HandlerDabort ;handler for DAbort</span><br />
<span style="color: #ff0000"> b . ;reserved</span><br />
<span style="color: #ff0000"> b HandlerIRQ ;handler for IRQ interrupt</span><br />
<span style="color: #ff0000"> b HandlerFIQ ;handler for FIQ interrupt</span></td>
</tr>
</tbody>
</table>
<p>CPU에 전원이 인가되면 처음으로 시작되는 Vector Table (0&#215;0000 0000)입니다.</p>
<p><span style="color: #00ccff"><strong>(2) Watchdog Disable</strong></span><br />
Watchdog가 무엇일까요? 직역을 하면 &#8220;지키는 개&#8221; 이런 뜻이네요. Watchdog는 보통 S/W적으로 설정한 시간동안 Kick(집지키는 개를 한번씩 차주어야 잠을 자지 않겠죠.)을 해주지 않으면 CPU를 Reset 시키는 기능으로 주로 사용합니다. 왜 이런 기능이 필요한 걸까요? 우리가 자주 사용하는 스마트폰을 예로 들어 보도록 하겠습니다. 스마트폰 사용중에 어떤 App을 실행시켰는데 그 이후로 스마트폰이 그 App때문에 터치도 되지않고, 전원 버튼도 입력이 되지 않게 먹통이 되었다고 가정을 하면 배터리를 분리시킨 후 다시 연결하는 방법 이외에는 방법이 없습니다. 이때 만약 Watchdog가 활성화 되어 있다면 스마트폰이 먹통이 되는 순간 S/W적으로 설정한 시간동안 Kick이 없으면 스마트폰이 Reset(재부팅)이 되어 다시 사용할 수 있는 상태가 될 것입니다. 배터리를 분리하는 것보다는 낫겠죠.<br />
그리고 부트코드에서 Watchdog Disable 하는 것은 부팅이 완료되기도 전에 Watchdog에 의해서 CPU가 Reset이 되는 것을 방지하기 위해서 하는 것입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm001.jpg" rel="lightbox[13612]"><img class="alignnone size-full wp-image-13684" alt="18feajkarm001" src="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm001.jpg" width="455" height="421" /></a></p>
<p>0&#215;5300 0000 번지의 SFR 레지스터를 제어하면 WTCON을 설정할 수 있습니다. 실제로는 5번 비트만 &#8220;0 = Disable&#8221; 해도 됩니다.</p>
<table style="border-collapse: collapse;width: 620px" border="1" cellspacing="0" cellpadding="10">
<tbody>
<tr>
<td><span style="color: #ff0000">ResetHandler</span><br />
<span style="color: #ff0000"> ldr r0,=WTCON ;watch dog disable</span><br />
<span style="color: #ff0000"> ldr r1,=0&#215;0</span><br />
<span style="color: #ff0000"> str r1,[r0]</span></td>
</tr>
</tbody>
</table>
<p><strong style="color: #00ccff">(3) Interrupt Disable</strong></p>
<p>부팅 중에 예측하지 못하는 인터럽트가 발생하지 않도록 Disable 하는 것이 안전합니다.</p>
<p>CPSR.I(1), CPSR.F(1) : 부팅 시에 &#8220;1&#8243; 로 마스킹 되어 있습니다.</p>
<p>- S3C2440 CPU Level의 Interrupt Controller를 Disable 합니다.<br />
Interrupt Mask Register<br />
Interrupt SubMask Register</p>
<p>아래 그림은 S3C2440 CPU의 인터럽트 컨트롤러 블럭도입니다. “S3C2440 CPU Level 의 Interrupt Controller를 Disable” 한다는 것은 아래 블럭도에서 바로 “SUBMASK”, “MASK”를 Disable(“1” 로 Mask) 한다는 것입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm041.jpg" rel="lightbox[13612]"><img class="alignnone size-large wp-image-13727" alt="18feajkarm041" src="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm041-620x172.jpg" width="620" height="172" /></a></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm002.jpg" rel="lightbox[13612]"><img class="alignnone size-full wp-image-13685" alt="18feajkarm002" src="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm002.jpg" width="482" height="273" /></a></p>
<table style="border-collapse: collapse;width: 620px" border="1" cellspacing="0" cellpadding="10">
<tbody>
<tr>
<td><span style="color: #ff0000">ldr r0,=INTMSK </span><br />
<span style="color: #ff0000"> ldr r1,=0xffffffff ;all interrupt disable</span><span style="color: #ff0000">str r1,[r0] ldr r0,=INTSUBMSK </span><br />
<span style="color: #ff0000"> ldr r1,=0x3ff ;all sub interrupt disable </span><br />
<span style="color: #ff0000"> str r1,[r0]</span></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><span style="color: #00ccff"><strong>(4) PLL 설정</strong></span><br />
우리가 사용하는 S3C2440 Mini 개발보드는 외부 Crystal로 12MHz를 사용합니다.<br />
Input Frequency가 12MHz 일때, FCLK:HCLK:PCLK = 400MHz : 100MHz : 40MHz, 즉 1:4:8 비율로 분주가 되도록 설정합니다.</p>
<p><span style="color: #33cccc">(4.1) Clock Divider Control Register(CLKDIVIN) 설정</span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm003.jpg" rel="lightbox[13612]"><img class="alignnone size-full wp-image-13686" alt="18feajkarm003" src="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm003.jpg" width="455" height="93" /></a></p>
<p>&nbsp;</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm004.jpg" rel="lightbox[13612]"><img class="alignnone size-full wp-image-13687" alt="18feajkarm004" src="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm004.jpg" width="454" height="381" /></a></p>
<p>CLKDIV_VAL 값이 “b00101”으로 세팅이 되어 있어서 FCLK:HCLK:PCLK = 1:4:8 비율로 분주가 되도록 설정이 됩니다.<br />
최종적으로는 12MHz의 입력주파수를 받아서 동작 주파수가 400MHz가 되도록 설정합니다.</p>
<p><span style="color: #33cccc">(4.2) UPLL Control Register(USB CLK) 설정</span></p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm005.jpg" rel="lightbox[13612]"><img class="alignnone size-full wp-image-13688" alt="18feajkarm005" src="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm005.jpg" width="451" height="218" /></a><br />
Upll = (m * Fin) / (p * 2s)<br />
m = (MDIV + 8), p = (PDIV + 2), s = SDIV</p>
<p>Fin = FCLK 입력으로 들어오는 Crystal 주파수 12MHz<br />
UPLL = ((56+8)*12) / ((2+2)*2*2) = 48MHz</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm006.jpg" rel="lightbox[13612]"><img class="alignnone size-full wp-image-13689" alt="18feajkarm006" src="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm006.jpg" width="453" height="152" /></a><br />
UPLL은 USB컨트롤러에서 사용할 CLK으로 결국은 12MHz Crystal 입력을 받아서 48MHz를 만들어서 사용하고 있습니다.</p>
<p><span style="color: #33cccc">(4.3) MPLL Control Register(Main CLK) 설정</span></p>
<p>Mpll = (2 * m * Fin) / (p * 2s)<br />
m = (MDIV + 8), p = (PDIV + 2), s = SDIV<br />
MPLL = (2*(92+8)*12) / ((1+2)*2*1) = 400MHz</p>
<p>MPLL은 결국은 12MHz Crystal 입력을 받아서 FCLK = 400MHz, HCLK = 100MHz, PCLK = 50MHz를 만들어서 사용하고 있습니다. HCLK과 PCLK의 계산은 CLKDIV 레지스터 설정을 FCLK:HCLK:PCLK = 1:4:8 비율로 분주비를 설정했기 때문에 자동으로 계산이 됩니다.<br />
- 참조로 PLL 계산 방식은 S3C2440 Datasheet를 참조하시기 바랍니다.</p>
<table style="border-collapse: collapse;width: 620px" border="1" cellspacing="0" cellpadding="10">
<tbody>
<tr>
<td>l<span style="color: #ff0000">dr r0,=CLKDIVN ; 0x4C000014</span><br />
<span style="color: #ff0000"> ldr r1,=CLKDIV_VAL ; CLKDIV_VAL=5 &#8212;&gt; 1:4:8</span><br />
<span style="color: #ff0000"> str r1,[r0]</span><span style="color: #ff0000">;Configure UPLL</span><br />
<span style="color: #ff0000"> ldr r0,=UPLLCON ; 0x4C000008</span><br />
<span style="color: #ff0000"> ldr r1,=((U_MDIV&lt;&lt;12)+(U_PDIV&lt;&lt;4)+U_SDIV) ; U_MDIV=56, U_PDIV=2, U_SDIV=2</span><br />
<span style="color: #ff0000"> str r1,[r0]</span><span style="color: #ff0000">;Configure MPLL</span><br />
<span style="color: #ff0000"> ldr r0,=MPLLCON</span><br />
<span style="color: #ff0000"> ldr r1,=((M_MDIV&lt;&lt;12)+(M_PDIV&lt;&lt;4)+M_SDIV) </span><br />
<span style="color: #ff0000"> str r1,[r0]</span></td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><strong><span style="color: #00ccff">(5) Internal Bus Mode</span></strong></p>
<table style="border-collapse: collapse;width: 620px" border="1" cellspacing="0" cellpadding="10">
<tbody>
<tr>
<td>     <span style="color: #ff0000">bl MMU_SetAsyncBusMode</span></td>
</tr>
</tbody>
</table>
<p>- Synchronous : Core Clock System Clock(HCLK)에 동기화 되어 사용</p>
<p>- Asynchronous : System Clock(HCLK)과 관계없이 Free Running Clock(FCLK)을 이용</p>
<p>우리는 FCLK을 이용할 것이기 때문에 MMU_SetAsyncBusMode 함수를 호출하였습니다.</p>
<p><span style="color: #00ccff"><strong>(6) Memory System 초기화</strong></span><br />
시스템에 연결된 FLASH, SDRAM, I/O Device 등과 같은 장치들을 제어하기 위해서 Memory Controller를 초기화해야 합니다.</p>
<p>- Access Timing<br />
- Data Bus Width<br />
- Wait Cycle<br />
- Refresh Rate<br />
- Bank Memory Size</p>
<p>소스 코드들이 꽤 알아먹기 힘든 코드들이네요. 복잡해 보이지만 하는 일은 BWSCON 주소의 SFR에 SMRDATA의 4Byte(32-bit) 데이터들을 루프를 돌면서 Write 하는 것입니다.</p>
<p>- SMRDATA : 메모리 컨트롤러 SFR에 기록할 내용들을 4Byte 길이로 해서 테이블 형태로 데이터를 순차적으로 가지고 있습니다.<br />
- BWSCON : S3C2440 메모리 컨트롤러의 SFR 주소입니다.</p>
<p>소스 파일의 memcfg.inc에 다음과 같이 정의되어 있습니다.<br />
;BWSCON<br />
DW8 EQU (0&#215;0)<br />
DW16 EQU (0&#215;1)<br />
DW32 EQU (0&#215;2)</p>
<p>WAIT EQU (0&#215;1&lt;&lt;2)<br />
UBLB EQU (0&#215;1&lt;&lt;3)</p>
<p>B1_BWSCON EQU (DW32)<br />
B2_BWSCON EQU (DW16)<br />
B3_BWSCON EQU (DW16+WAIT+UBLB)<br />
B4_BWSCON EQU (DW16) ; N.C.<br />
B5_BWSCON EQU (DW16) ; N.C.<br />
B6_BWSCON EQU (DW32) ; MINI2440 SDRAM (K4S281632C)-2M*16bit*4Bank*2, SDRAM(K4S561632C) 32MBx2, 32-bit<br />
B7_BWSCON EQU (DW32) ; N.C.</p>
<p>SMRDATA의 맨 첫번째 데이터들이 무엇을 의미하는 것일까요?</p>
<p>(0+(B1_BWSCON&lt;&lt;4)+(B2_BWSCON&lt;&lt;8)+(B3_BWSCON&lt;&lt;12)+(B4_BWSCON&lt;&lt;16)+(B5_BWSCON&lt;&lt;20)+(B6_BWSCON&lt;&lt;24)+(B7_BWSCON&lt;&lt;28)) &#8211;&gt; (0+(0&#215;2&lt;&lt;4)+(0&#215;1&lt;&lt;8)+(0xD&lt;&lt;12)+(0&#215;1&lt;&lt;16)+(0&#215;1&lt;&lt;20)+(0&#215;2&lt;&lt;24)+(0&#215;2&lt;&lt;28))</p>
<p>상위 비트부터 살펴보도록 하겠습니다.</p>
<p>- (0&#215;2&lt;&lt;28) = DW7[29:28] = Bank7에는 어떤 Memory 디바이스도 연결되어 있지 않습니다. 사실은 무의미한 코드입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm007.jpg" rel="lightbox[13612]"><img class="alignnone size-full wp-image-13690" alt="18feajkarm007" src="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm007.jpg" width="451" height="172" /></a><br />
- (0&#215;2&lt;&lt;24) = DW6[25:24] = Bank6은 SDRAM이 연결되어 있는 메모리 뱅크입니다. 데이터 라인은 32bit(2b10) 입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm008.jpg" rel="lightbox[13612]"><img class="alignnone size-full wp-image-13691" alt="18feajkarm008" src="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm008.jpg" width="452" height="90" /></a></p>
<p>- (0&#215;1&lt;&lt;20) = DW5[21:20] = N.C(Not connected)</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm009.jpg" rel="lightbox[13612]"><img class="alignnone size-full wp-image-13692" alt="18feajkarm009" src="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm009.jpg" width="453" height="87" /></a><br />
- (0&#215;1&lt;&lt;16) = DW4[17:16] = N.C(Not connected)</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm010.jpg" rel="lightbox[13612]"><img class="alignnone size-full wp-image-13693" alt="18feajkarm010" src="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm010.jpg" width="454" height="96" /></a><br />
- (0xD&lt;&lt;12) = ST3[15], WS3[14], DW3[13:12] = 16-bit DM9000 Ehternet 컨트롤러 설정입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm011.jpg" rel="lightbox[13612]"><img class="alignnone size-full wp-image-13694" alt="18feajkarm011" src="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm011.jpg" width="451" height="200" /></a></p>
<p>- (0&#215;1&lt;&lt;8) = DW2[9:8] = N.C(Not connected)</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm012.jpg" rel="lightbox[13612]"><img class="alignnone size-full wp-image-13695" alt="18feajkarm012" src="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm012.jpg" width="450" height="98" /></a><br />
- (0&#215;2&lt;&lt;4) = DW1[5:4] = N.C(Not connected)</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm013.jpg" rel="lightbox[13612]"><img class="alignnone size-full wp-image-13696" alt="18feajkarm013" src="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm013.jpg" width="453" height="145" /></a><br />
- (0&#215;0) = DW0[2:1] = Read only 영역으로 OM[1:0] 핀에 의해서 결정됩니다. 우리가 사용하는 개발보드는 16bit Data width의 NOR Flash 입니다.</p>
<p><a href="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm013.jpg" rel="lightbox[13612]"><img class="alignnone size-full wp-image-13696" alt="18feajkarm013" src="http://www.ntrexgo.com/wp-content/uploads/2013/05/18feajkarm013.jpg" width="453" height="145" /></a><br />
나머지 데이터 설정값들도 Datasheet를 참조해서 분석해 보시기 바랍니다.</p>
<table style="border-collapse: collapse;width: 620px" border="1" cellspacing="0" cellpadding="10">
<tbody>
<tr>
<td><span style="color: #ff0000">;Set memory control registers </span><br />
<span style="color: #ff0000">ldr r0,=SMRDATA </span><br />
<span style="color: #ff0000">ldr r1,=BWSCON ; 0&#215;48000000 </span><br />
<span style="color: #ff0000">add r2, r0, #52 ;End address of SMRDATA </span><br />
<span style="color: #ff0000">L5 </span><br />
<span style="color: #ff0000">ldr r3, [r0], #4 </span><br />
<span style="color: #ff0000">str r3, [r1], #4 </span><br />
<span style="color: #ff0000">cmp r2, r0 </span><br />
<span style="color: #ff0000">bne L5</span><span style="color: #ff0000">.</span><br />
<span style="color: #ff0000">.</span><br />
<span style="color: #ff0000">.</span><br />
<span style="color: #ff0000">LTORG</span><br />
<span style="color: #ff0000">SMRDATA DATA</span><br />
<span style="color: #ff0000">DCD (0+(B1_BWSCON&lt;&lt;4)+(B2_BWSCON&lt;&lt;8)+(B3_BWSCON&lt;&lt;12)+(B4_BWSCON&lt;&lt;16)+(B5_BWSCON&lt;&lt;20)+(B6_BWSCON&lt;&lt;24)+(B7_BWSCON&lt;&lt;28))</span><br />
<span style="color: #ff0000">DCD ((B0_Tacs&lt;&lt;13)+(B0_Tcos&lt;&lt;11)+(B0_Tacc&lt;&lt;8)+(B0_Tcoh&lt;&lt;6)+(B0_Tah&lt;&lt;4)+(B0_Tacp&lt;&lt;2)+(B0_PMC)) ;GCS0</span><br />
<span style="color: #ff0000">DCD ((B1_Tacs&lt;&lt;13)+(B1_Tcos&lt;&lt;11)+(B1_Tacc&lt;&lt;8)+(B1_Tcoh&lt;&lt;6)+(B1_Tah&lt;&lt;4)+(B1_Tacp&lt;&lt;2)+(B1_PMC)) ;GCS1</span><br />
<span style="color: #ff0000">DCD ((B2_Tacs&lt;&lt;13)+(B2_Tcos&lt;&lt;11)+(B2_Tacc&lt;&lt;8)+(B2_Tcoh&lt;&lt;6)+(B2_Tah&lt;&lt;4)+(B2_Tacp&lt;&lt;2)+(B2_PMC)) ;GCS2</span><br />
<span style="color: #ff0000">DCD ((B3_Tacs&lt;&lt;13)+(B3_Tcos&lt;&lt;11)+(B3_Tacc&lt;&lt;8)+(B3_Tcoh&lt;&lt;6)+(B3_Tah&lt;&lt;4)+(B3_Tacp&lt;&lt;2)+(B3_PMC)) ;GCS3</span><br />
<span style="color: #ff0000">DCD ((B4_Tacs&lt;&lt;13)+(B4_Tcos&lt;&lt;11)+(B4_Tacc&lt;&lt;8)+(B4_Tcoh&lt;&lt;6)+(B4_Tah&lt;&lt;4)+(B4_Tacp&lt;&lt;2)+(B4_PMC)) ;GCS4</span><br />
<span style="color: #ff0000">DCD ((B5_Tacs&lt;&lt;13)+(B5_Tcos&lt;&lt;11)+(B5_Tacc&lt;&lt;8)+(B5_Tcoh&lt;&lt;6)+(B5_Tah&lt;&lt;4)+(B5_Tacp&lt;&lt;2)+(B5_PMC)) ;GCS5</span><br />
<span style="color: #ff0000">DCD ((B6_MT&lt;&lt;15)+(B6_Trcd&lt;&lt;2)+(B6_SCAN)) ;GCS6</span><br />
<span style="color: #ff0000">DCD ((B7_MT&lt;&lt;15)+(B7_Trcd&lt;&lt;2)+(B7_SCAN)) ;GCS7</span><br />
<span style="color: #ff0000">DCD ((REFEN&lt;&lt;23)+(TREFMD&lt;&lt;22)+(Trp&lt;&lt;20)+(Trc&lt;&lt;18)+(Tchr&lt;&lt;16)+REFCNT)</span><br />
<span style="color: #ff0000">DCD 0&#215;32 ;SCLK power saving mode, BANKSIZE 128M/128M DCD 0&#215;30 ;MRSR6 CL=3clk</span><br />
<span style="color: #ff0000">DCD 0&#215;30 ;MRSR7 CL=3clk</span><br />
<span style="color: #ff0000">DATA</span></td>
</tr>
</tbody>
</table>
<p style="text-align: right"><span style="color: #999999">JK전자와 함께하는 ARM 완전정복(4)-2 에서 계속 됩니다.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ntrexgo.com/archives/13612/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
