<?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>Pic dsPIC Arm7 Arm Cortex Programlama ve Projeler &#187; uart</title>
	<atom:link href="http://www.uicroarm.com/tag/uart/feed" rel="self" type="application/rss+xml" />
	<link>http://www.uicroarm.com</link>
	<description>ds-pic arm-7 cortex nxp proje uygulama</description>
	<lastBuildDate>Wed, 01 Feb 2012 22:41:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Nxp arm7 &#8211; Uart</title>
		<link>http://www.uicroarm.com/nxp-arm7-uart</link>
		<comments>http://www.uicroarm.com/nxp-arm7-uart#comments</comments>
		<pubDate>Mon, 09 Mar 2009 13:17:55 +0000</pubDate>
		<dc:creator>Aykut</dc:creator>
				<category><![CDATA[ARM7 Uygulamaları]]></category>
		<category><![CDATA[assembly]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[KEIL]]></category>
		<category><![CDATA[LPC2148]]></category>
		<category><![CDATA[rs232]]></category>
		<category><![CDATA[uart]]></category>

		<guid isPermaLink="false">http://www.uicroarm.com/?p=58</guid>
		<description><![CDATA[

Merhaba,
Öncelik sitenin amacı konusunda açıklık getirmeliyim. Siteyi inceleyen çoğu arkadaş içeriği beğendi, bazı arkadaşlar ise açıklamaların daha detaylı olmasını istiyorlar. Bu sitede benim amacım: mpasm, asm30, C30, keil , arm7 assembly veya C dil ve programlarını detaylıca anlatmak olmadığı için, isteyen arkadaş devam etmek istediği program ve/veya  dil(leri) araştırıp öğrenmenlidir. Fakat tavsiye isteyen arkadaşlara [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-59" title="uart_prog_kucuk" src="http://www.uicroarm.com/wp-content/dosyalar/2009/03/uart_prog_kucuk.jpg" alt="uart_prog_kucuk" width="295" height="221" /><br />
<span id="more-58"></span></p>
<p>Merhaba,</p>
<p>Öncelik sitenin amacı konusunda açıklık getirmeliyim. Siteyi inceleyen çoğu arkadaş içeriği beğendi, bazı arkadaşlar ise açıklamaların daha detaylı olmasını istiyorlar. Bu sitede benim amacım: mpasm, asm30, C30, keil , arm7 assembly veya C dil ve programlarını detaylıca anlatmak olmadığı için, isteyen arkadaş devam etmek istediği program ve/veya  dil(leri) araştırıp öğrenmenlidir. Fakat tavsiye isteyen arkadaşlara tabii ki elimden geldiğince yardımcı olamaya çalışacağım. Elektronik donanım tasarımı olsun, bilgisayar veya programlama dilleri olsun hepsinin öğrenmek için tek bir ortak noktası vardır. İngilizce, bu dil mesleğimizde ilerleyebilmek için şarttır. Şimdi uygulamamıza geçelim.</p>
<p>Bu uygulamızda  LPC2148&#8242;in uart1&#8242;inden 19200bps ile data gonderimi yapacağız. Bunun için bize gerekenler.</p>
<p>* Keil C compiler</p>
<p>* LPC2148 development board</p>
<p>* ISP programlayıcı (in circuit serial programmer)</p>
<p>* Hiper terminal veya rs232&#8242;den alınan verilerimizi gözlemliyebileceğimiz başka bir program<br />
Ben bu örnekte Ersin Keçiş adlı bir arkadaşımızın geliştirdiği rs232 tester adlı programı kullanacağım.<br />
http://ersinkecis.com/RS232_Tester.zip (Böyle faydalı bir program hazırladığı için Ersin Keçiş&#8217;e teşekkürler)</p>
<p>Program resmi ve programın kendisi aşağıdadır.</p>
<p><a href="http://www.uicroarm.com/wp-content/dosyalar/2009/03/uart_prog_buyuk.jpg" rel="lightbox[58]"><img class="alignnone size-thumbnail wp-image-60" title="uart_prog_buyuk" src="http://www.uicroarm.com/wp-content/dosyalar/2009/03/uart_prog_buyuk-150x150.jpg" alt="uart_prog_buyuk" width="150" height="150" /></a></p>
<pre class="brush: cpp; title: ; notranslate">
/*****************************************************************************/
#include &lt;LPC214x.h&gt;
//#include &quot;port_pinleri.h&quot;

void  sistem_setup(void);
void  DLY_MS(long ms);
void  uart1_setup(void);
void  u1_karakter_gonder(char ch);
void  u1_string_gonder(const char *ch);

const char kutay[]={&quot;UART1 ile, 19200bps'de data gonderiyoruz\r\n&quot;};

int
main(void){
   sistem_setup();
   SCS = 0x03;			// fast I/O moduna geelim
   uart1_setup();			// uart1,19200bps,1 stop bit, parity yok
   while (1){
      u1_string_gonder(&amp;kutay[0]);	// uart1'den 19200bps'de diziyi gonder
      DLY_MS(1000);
      u1_string_gonder(&quot;www.uicroarm.com&quot;);
      DLY_MS(1000);
   }
}

// Uart1 baudrate = PCLK(VPB Clock) / 16*(16*U1DLM+U1DLL) ile bulunur
// Yukaridaki formul bazi durumlarda tam olarak baudrate ayarini yapamiyabilir
// yani sonu kesirli ikabilir , o zaman kesirli bolme islemlerini yapabilen
// U1FDR registeride kullanilmalidir. (U1 fractional divider register)
void
uart1_setup(void){
   PINSEL0|=0x50000;       // RxD1 ve TxD1 pinleri enable
   U1LCR=0x83;    			// 8 bits, Parity yok, 1 Stop bit
   U1DLL = 97;             // 19200 Baud Rate ,
   U1DLM = 0;
   U1LCR = 0x03;           // baudrate ayarlandi
}

void
u1_karakter_gonder (char ch){    	// Karakteri seri porta yaz
   while (!(U1LSR &amp; 0x20));	   // bus idle oluncaya kadar bekle
   U1THR=ch;			     // karakter bus'a
}

void
u1_string_gonder(const char *ch){	   	// string yazilacak
   while(*ch)					   		//
      u1_karakter_gonder(*ch++);
}

void
sistem_setup(void){
// Processor clock=5*12Mhz=60Hz
   PLL0CFG=0x24;	 	// MSEL = 4(multiplier =5),PSEL(PLL divider) = 2
// PLLCON ve PLLCFG registerleri ierigi degistirildiginde , asagidaki
// proses uygulanir, 1) PLL0FEED=0xAA ve 2)PLL0FEED=0x55
   PLL0FEED=0xAA;	 	// Feed process
   PLL0FEED=0x55;

   PLL0CON=0x1;  		// PLL'i enable	et
   PLL0FEED=0xAA;		// Feed process
   PLL0FEED=0x55;
   while(!(PLL0STAT &amp; 0x400)) ;   // PLL kitleninceye kadar bekle (5*12Mhz=60Mhz'e kitlenir)

   PLL0CON=0x3;	 	// PLL'i clock kaynagi gibi bagla
   PLL0FEED=0xAA;	 	// Feed process
   PLL0FEED=0x55;

   MAMCR=0x2;	  		// MAM full Enable
   MAMTIM=0x4;			// MAM fetch cycles = 4CCLK

   VPBDIV=0x02;	 	// PCLK = 30 MHz (Pclk=Peripheral Clock)
}

// CCLK=60MHz iken 1ms
void
DLY_MS(long ms){
   long i;
   unsigned int j;
   for (i = 0; i &lt; ms; i++ )
      for (j = 0; j &lt; 7500; j++ );
}

/*****************************************************************************/
</pre>
<p>Bu program ile elde ettiğimiz sonuç:</p>
<p><a href="http://www.uicroarm.com/wp-content/dosyalar/2009/03/uart_sonuc.jpg" rel="lightbox[58]"><img class="alignnone size-thumbnail wp-image-61" title="uart_sonuc" src="http://www.uicroarm.com/wp-content/dosyalar/2009/03/uart_sonuc-150x150.jpg" alt="uart_sonuc" width="150" height="150" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.uicroarm.com/nxp-arm7-uart/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>dsPIC &#8211; ASM30 ile Uart</title>
		<link>http://www.uicroarm.com/dspic-asm30-ile-uart</link>
		<comments>http://www.uicroarm.com/dspic-asm30-ile-uart#comments</comments>
		<pubDate>Sun, 01 Mar 2009 19:22:25 +0000</pubDate>
		<dc:creator>Aykut</dc:creator>
				<category><![CDATA[PIC24F dsPIC30F dsPIC33F Uygulamaları]]></category>
		<category><![CDATA[asm30]]></category>
		<category><![CDATA[dsPIC30F]]></category>
		<category><![CDATA[PIC24F]]></category>
		<category><![CDATA[PIC33F]]></category>
		<category><![CDATA[uart]]></category>

		<guid isPermaLink="false">http://www.uicroarm.com/?p=30</guid>
		<description><![CDATA[
Merhaba,
Bu yazımızda microchip asm30 ile uart haberleşmesini gerçekleştireceğiz. Bu bölümde port değiştirme (led veya role sürme) gibi bir uygulamadan başlamak istemedim. Microchip asm30 derleyicisini ve dsPIC,PIC24 serinin registerlerini C optimizasyonu için özel olarak ayarlamış. C&#8217;deki while, do-while, işlemlerini yapan asm30 komutları ve regsiterleri var. Küçük bir örnek olarak asm30 &#8220;repeat #k&#8221; komutu kendisinden sonraki komutu [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.uicroarm.com/wp-content/dosyalar/2009/03/dspic_kucuk4.jpg" alt="dspic_kucuk4" title="dspic_kucuk4" width="295" height="221" class="alignnone size-full wp-image-56" /><span id="more-30"></span></p>
<p>Merhaba,</p>
<p>Bu yazımızda microchip asm30 ile uart haberleşmesini gerçekleştireceğiz. Bu bölümde port değiştirme (led veya role sürme) gibi bir uygulamadan başlamak istemedim. Microchip asm30 derleyicisini ve dsPIC,PIC24 serinin registerlerini C optimizasyonu için özel olarak ayarlamış. C&#8217;deki while, do-while, işlemlerini yapan asm30 komutları ve regsiterleri var. Küçük bir örnek olarak asm30 &#8220;repeat #k&#8221; komutu kendisinden sonraki komutu k+1 kez çalıştırır. Bu yapı C&#8217;deki while{} yapısına benzer.</p>
<p>Aslında Microchip projelerimde C30 kullanıyorum ama şimdiye kadar intenette de doğru düzgün asm30 kod görmediğim için referans olması açısından bir kaç uygulama eklemek isteyorum. Açıkçası Microchip&#8217;in PIC24 ve dsPIC serisini beğendim.PIC24 serisinde özellikle kullanmak istediğin modulun port çıkışlarını seçmek için registerler koymaları çok iyi, bu pcb çizenlere de kolaylık sağlar. dsPIC&#8217;te ise 40bitlik çarpma işlemlerini gerçekleştirebilen bir donanıma sahip.</p>
<p>Burada yazdığım kodları yukarıda resmini verdiğim dsPIC30F4011 geliştirme boardunda denedim. Geliştirme board&#8217;unuda 2006&#8242;da ben hazırlamıştım. Resim üzerinde yine daha önce yaptığım nokia lcd üzerinde animasyon ve kayan yazı uygulamasından küçük örnek var. (LQFP kılıf uc olan board LPC2148 board&#8217;u)</p>
<p><a href="http://www.uicroarm.com/wp-content/dosyalar/2009/03/dspic_buyuk3.jpg" rel="lightbox[30]"><img src="http://www.uicroarm.com/wp-content/dosyalar/2009/03/dspic_buyuk3-150x150.jpg" alt="dspic_buyuk3" title="dspic_buyuk3" width="150" height="150" class="alignnone size-thumbnail wp-image-57" /></a></p>
<pre class="brush: cpp; title: ; notranslate">
/*********************************************************/
Aykut ULUSAN, Elektronik Mühendisi, IZMIR

Aşağıda 38400bps ile 0,5 saniyede bir KUTAY table'ı uart1'den gönderilir.

/*********************************************************/

.equ __30F3010, 1				             ; kullanılacak işlemci
.include &quot;p30fxxxx.inc&quot;
config	__FOSC, CSW_FSCM_OFF &amp;XT_PLL8    ; 10Mhz*8 =80Mhz
config	__FWDT, WDT_OFF				         ;  WDT off
config	__FBORPOR, MCLR_EN &amp;PBOR_OFF &amp;PWRT_16	; Brown-out off, MCLR enable, Power_up timer 16msn
config 	__FGS, CODE_PROT_OFF			       ; Kod koruması off

.equiv	flag_bit, 0					; zamanın dolduğunu bildirir
.equiv	FCY, 20000000				    ; Osc 80Mhz / FCY=20Mhz =20MIPS
.equiv	BAUDRATE, 38400				  ; RS232 baudrate 38400

.macro 	MOVFF	F1,F2				   ; F1, F2'ye atılır
mov	\F1,wreg
mov	wreg,\F2
.endm

.macro	MOVLF	L,F					; Literal file'a atılır
mov	\L,w0
mov	w0,\F
.endm

;=============================================================================================
; global atamalar yapılır, C30 içinde kullanacağımız tüm altprogramlar global olmalı
;=============================================================================================

.global	__reset					; Device resetten sonra hemen  __reset etiketini gördüğü yere gider, linker içinde tanımlanmıştır.
.global	__T1Interrupt			      ; Artık asm içinde  interrupt,

.section 	.const, &quot;r&quot;  				; PSV içinde Kutay adlı bir table tutalım, r=read only data
KUTAY:
.asciz	&quot;asm30 ile uart1, 38400bps by EEMKUTAY&quot;	; asciz, zero ile sonlanır

.text							; program buradan başlar, code yazma başlangıcı

__T1Interrupt:						; işlemci 0,5 sn'de bir buraya gelir
bclr  	IFS0, #T1IF				; flag'i sil
bset	W1, #flag_bit				; RS232 flag biti set et
retfie						    ; interrupt'an geri dön

__reset:
mov	#__SP_init, W15				; __SP_init , işlemciye göre linker içinde tanımlı, W15 stack pointer
MOVLF	#__SPLIM_init,SPLIM			; Stack Pointer limiti gir, linker içinde tanımlı
nop						        ; SPLIM ayarlanması için bir nop gerekli
; Şimdi working registerleri clear edeceğiz
clr	W0					      ; W0
mov	W0, W14 				; W14, adres pointer  oldu  ve  W14=0 adresini gösterir(adres pointer) yani W0'ın adresini
repeat	#12                                        ; next komut 13 kez repeat
mov	W0, [++W14]				; W1 - W13'ü clear yapar
clr	W14					; Counter'i silelim, W14=0

rcall	PORTLARI_HAZIRLA			; portları hazırla
rcall	INIT_TIMER1				; timer1'i  0,5 saniye için ayarla
rcall	INIT_UART1				; uart1 hazırlanır
bclr	W1, #flag_bit				; 0,5sn dolmadan table'ı gönderme
; table okuma ve yazma komutlarıyla , string okuyalım
mov	#tblpage(KUTAY),w0			;Kutay table'ın  page’ını w0’a at
mov	w0, _TBLPAG

main_loop:
btss	W1, #flag_bit				; 0,5 sn doluncaya kadar bekle
bra	main_loop				; zaman dolmamış
bclr	W1, #flag_bit				; zaman dolmuş flag'i clear et
mov	#tbloffset(KUTAY), W2 ; w2'yi pointer olarak kullanacağız (w2, KUTAY table'ın adresini tutuyor)
clr		W0				; w0=0 yap çünkü byte yükleyeceğiz (bit15-8 arası 0 olsun)

wrt_loop:
mov.b	[W2++], W0				; harfi W0'a yükle (byte modunda Program counter 1 artar)
cp0	W0					     ; karakter 0 ise string sonu
bra	z, main_loop				   ; Z=1 ise main loop'a git
mov	W0, U1TXREG				; harfi buffer'a at
xmt_loop:
btss	U1STA, #TRMT				; gönderildi mi?( gönderilince 1 olur)
bra	$-2					       ; Gönderilinceye kadar bekle
bra	wrt_loop				     ; next harfi gönder

PORTLARI_HAZIRLA:
clr	LATF					; portu temizle
mov	#0xFF,w0
mov	w0,TRISF
return

; Instruction cycle = 20MIPS
; ds30f3010 üzerinde TMR1 A tipi timerdır. (50ns x prescale x PR1 = zaman)
; zaman =0,5sn için, prescale=1/256  (0,5sn= 500ms=500 000us)
; 50nsx256=12580ns=12,8us
; PR1 = 500 000us / 12,8us = 39765=0x9B41
INIT_TIMER1:
clr	TMR1
MOVLF	#0x9B41,PR1				; PR1'e yükle
MOVLF	#0x8030, T1CON				; 1:256 prescale ve timer1 on
bclr	IFS0, #T1IF				; TMR1 interrupt flag clear
bset	IEC0, #T1IE				; TMR1 interrupt set
return

INIT_UART1:
clr 	U1MODE					; Uart mode clear et, bit ile ayarlayacağız
clr 	U1STA					; status biti clear et,  bit ile ayarlayacağız
;	bset	U1MODE, #ALTIO				; U1ATX/U1ARX pinlerini kullan
bset 	U1MODE, #UARTEN 			; Enable UART
mov 	#(((FCY/BAUDRATE) / 16) - 1), w0
mov 	w0, U1BRG				; BRG ayarla
return

.end

/*********************************************************/
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.uicroarm.com/dspic-asm30-ile-uart/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

