<?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>正在戒网&#039;Blog &#187; 嵌入式研究</title>
	<atom:link href="http://isfate.com/category/work/mcu/feed" rel="self" type="application/rss+xml" />
	<link>http://isfate.com</link>
	<description>放了自已,才能高飞!</description>
	<lastBuildDate>Fri, 21 Oct 2011 13:48:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Ubuntu下ARM交叉编译环境架设笔记-未成功版本,请匆模仿!</title>
		<link>http://isfate.com/758.html</link>
		<comments>http://isfate.com/758.html#comments</comments>
		<pubDate>Sun, 11 Sep 2011 19:30:25 +0000</pubDate>
		<dc:creator>isfate</dc:creator>
				<category><![CDATA[嵌入式研究]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://isfate.com/?p=758</guid>
		<description><![CDATA[最近的文章都写得很乱,并且没有标示已成功的文章请匆做参考,因为这些都只是我的学习笔记,成功与否不清楚. 以下为了安装方便,全部是在root用户模式下进行.普通用户的话需要在命令前加sudo. 1:安装交叉编译器 为了不折腾,就先用友善之臂的了. mkdir -p /home/linux-tools cd /home/linux-tools wget http://soft.isfate.com/linux-tools/arm-linux-gcc-4.4.3.tar.gz tar xvzf arm-linux-gcc-4.4.3.tgr.gz -C / 这样会把arm-linux-gcc-4.4.3.tgr.gz解压到/opt下,然后增加一个全变量: 修改/etc/profile,在合适位置增加&#8217;export PATH=$PATH: /opt/FriendlyARM/toolschain/4.4.3/bin&#8217; 最后看起来会是像下面代码一样,注意里面的符号可能因为复制粘贴而导至变量设置失效: # /etc/profile: system-wide .profile file for the Bourne shell (sh(1)) # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...). /*节约硬盘空间.中间省略一大堆*/ fi export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin umask 022 编辑好后重启,然后用&#8217;arm-linux-gcc -v&#8217;测试环境是否安装成功]]></description>
		<wfw:commentRss>http://isfate.com/758.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>S3C2440,PLL笔记</title>
		<link>http://isfate.com/628.html</link>
		<comments>http://isfate.com/628.html#comments</comments>
		<pubDate>Tue, 19 Jul 2011 04:42:32 +0000</pubDate>
		<dc:creator>isfate</dc:creator>
				<category><![CDATA[嵌入式研究]]></category>
		<category><![CDATA[PLL]]></category>

		<guid isPermaLink="false">http://blog.isfate.com/?p=628</guid>
		<description><![CDATA[PLL源有两个,一个是MPLL,另一个是UPLL.  MPLL用于CPU用外设,UPLL只用于USB. MPLL中又有FCLK; HCLK; PCLK FCLK:用于CPU内核. HCLK:用于AHB总线(SRAM等高速外设) PCLK:用于APB总线(UART等低速外设在这个总线上) 与MPLL相关的寄存器: LOCKTIME寄存器: MPLL启动后需要等待一段时间(Lock Time)，使得其输出稳定。位[23:12]用于UPLL，位[11:0]用于MPLL。使用确省值0x00ffffff即可 CLKDIVN: 用来设置FCLK:HCLK:PCLK的比例关系，默认为1:1:1 经典值设为0&#215;03，即FCLK:HCLK:PCLK=1:2:4(FLCK:HCLK:PCLK),具体设置在三星数据手册第七章中有个表. MPLLCON: MPLLCON中分三部份.M&#124;P&#124;S,  其中MDIV[19:12],PDIV[9:4],SDIV[1:0] m=MDIV+8,   p=PDIV+2,   s=SDIV   要注意M,P,S的大小写,值是不一样的 CLKCON: 外设时钟控制与内存电源模式.在这里可以开启与关闭外设的时钟,用于节电管理,默认全部外设时钟都是开始的!与Cortex的不同.要在应用中去关闭以省电! CLKSLOW: 慢速时钟?好像是说用于在PLL切换时的等待时间,以后是否再对MPLL分频再到FCLK.保持默认即可. CAMDIVN: 摄像头的时候分频设置.这个现在用不上,以后再看 对于时钟的计算PLL的输出,FCLK=MPLL的输出,MPLL=(2*m*fin)/(p*2s).注意大小写.其他的HCLK与PCLK按CLKDIVN设定进行分频. 注意:启用了PLL后,FCLK应不能低于200M! HCLK与PCLK的时钟不能大于额定值,否则部份外设失效]]></description>
		<wfw:commentRss>http://isfate.com/628.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>S3C2440 GPIO 笔记</title>
		<link>http://isfate.com/624.html</link>
		<comments>http://isfate.com/624.html#comments</comments>
		<pubDate>Tue, 19 Jul 2011 04:33:25 +0000</pubDate>
		<dc:creator>isfate</dc:creator>
				<category><![CDATA[嵌入式研究]]></category>
		<category><![CDATA[S3C2440gpio]]></category>

		<guid isPermaLink="false">http://blog.isfate.com/?p=624</guid>
		<description><![CDATA[在很久很久以前玩了一下2440开发板.并且点了下LCD.但后来一年多没碰了,居然又连LED都不会点了,郁闷啊.看来不做笔记是不行的,从现在开始所做过的每一件事,都在这个网站记来好了,再弄个SVN.TNND.我的S3C2440学习笔记SVN传送门,http://svn.isfate.com/s3c2440 拿友善之臂的2440开发板来练习.工具使用的MDK.启动代码用MDK自带的升成.目的是驱动核心板上那四个LED.其他的什么我都不关心,走出第一步要紧. 四个LED使用的是GPB5~8,灌电流,低亮的方式.在MDK里用启动代码配置器设置GPB5~8为输出方式.然后配置内存如下图: 主程序非常简单,如下: 这样.可以看到LED是一隔一个亮一个,说明我们的MAIN程序已经正常运行了!详细的研究,以后再更新了,因为现在我也不会..]]></description>
		<wfw:commentRss>http://isfate.com/624.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Keil C51在C程序里调用汇编程序的方法</title>
		<link>http://isfate.com/621.html</link>
		<comments>http://isfate.com/621.html#comments</comments>
		<pubDate>Tue, 19 Jul 2011 04:28:35 +0000</pubDate>
		<dc:creator>isfate</dc:creator>
				<category><![CDATA[嵌入式研究]]></category>
		<category><![CDATA[Keil]]></category>
		<category><![CDATA[调用汇编]]></category>

		<guid isPermaLink="false">http://blog.isfate.com/?p=621</guid>
		<description><![CDATA[在网上的资料,C51与汇编的混合编程都是一般的在C程序里嵌入汇编.很少提及c语言如何调用汇编程序,在汇编中使用C语言中定义的变量等.现在我整理了一下,在这里详尽地说明如何在汇编中使用C变量与在C与汇编如何互动等. 本文仅适用于Keil C51,戒往(QQ:8926785)总结与归类于 嵌入式社区(http://arm.im).转载请注时原出处,谢谢 要实现C与汇编混合编程,对汇编文件的格式要求很好,好在Keil MDK本身自带有一个升成汇编文件的功能,我们可以利用这个功能来完成我们想要的汇编目标文件,然后修改这个文件中的代码,这样就省去了对汇编文件的一些块设置等一堆麻烦事. 这样就有个思路,我们在C语言里先做好某个函数的模型,把我们要用到的变量等放进去.然后利用KEIL自代升成汇编功能升成汇编文件后,再去修改.最后把这汇编文件加入工程中,把原来的C文件从工程中移出. 方法:如果我们想写一个或几个汇编下的函数,可以先用一个单独的C文件,把这些函数用C把它实现,比如新建一个文件”fun.c”,然后加入C代码: unsigned char asmtest&#40;unsigned char isfate&#41; &#123; unsigned s; s=isfate+20; return s; &#125; 然后在KEIL工程左边对这个C文件点右键,选择Options for file “xxx”这个选项,点击使右边的”Generate Assembler SRC File”和”Assemble SRC File”，使检查框由灰色变成有效状态后,重新编译整个工程. 之后你会发现工程目录里会得到一个这样的文件 fun.src 这个文件就是编译器升成的汇编文件,与平时升成的那个list文件不同,这个文件可以直接拿到工程里编译. 把这个SRC文件改名成 asm后缀,直接加入工程,再把原来的fun.c移出工程,编译.OK.]]></description>
		<wfw:commentRss>http://isfate.com/621.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>让人十分郁闷的STM32 GPIO与管脚复用</title>
		<link>http://isfate.com/582.html</link>
		<comments>http://isfate.com/582.html#comments</comments>
		<pubDate>Wed, 29 Jun 2011 09:48:13 +0000</pubDate>
		<dc:creator>isfate</dc:creator>
				<category><![CDATA[嵌入式研究]]></category>
		<category><![CDATA[STM32]]></category>
		<category><![CDATA[管脚复用]]></category>

		<guid isPermaLink="false">http://blog.isfate.com/?p=582</guid>
		<description><![CDATA[最近几天一直卡在STM32的USART配置.原计划全部用自已写寄存器搞定的,但是发现自已写寄存器的话实在太烦了,资料少不说了,有资料也是叫你直接看固件库.晕.好,那就用固件库吧. 使用固件库配置IO的时候,我将TX的模式配为开漏输出.结果一直发送不了数据,之前我一直找不到原因,在这里还曾卡住了好几天,甚至还将固件库给升级到3.5版本,还是无果.最后没办法,把ST的例程拿来一字一句地对比,最后才把IO改为GPIO_Mode_AF_PP,果然.神奇地PC端收到数据了! 经过分析得出,原来开漏输出与那个复用开漏输出是有区别的!.开漏输出只是给GPIO模式用的,而复用开漏输出才是给复用功能的IO模式进行配置.另外还有AD摸拟输入模式&#8230;&#8230;&#8230;&#8230;&#8230;唉.真TM烦锁,ST为什么不学学NXP呢,那个寄存器设置简单明了,用户手册也是直接切入重点,多人性化的!]]></description>
		<wfw:commentRss>http://isfate.com/582.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>51单片机及其他嵌入式,C语言总汇</title>
		<link>http://isfate.com/546.html</link>
		<comments>http://isfate.com/546.html#comments</comments>
		<pubDate>Wed, 11 May 2011 15:12:17 +0000</pubDate>
		<dc:creator>isfate</dc:creator>
				<category><![CDATA[嵌入式研究]]></category>
		<category><![CDATA[记事本]]></category>
		<category><![CDATA[C语言]]></category>
		<category><![CDATA[嵌入式]]></category>

		<guid isPermaLink="false">http://isfate.com/?p=546</guid>
		<description><![CDATA[不知不觉间.已经来上海工作了一年多了,幕然之间觉得在这一年多时间里每日都是在昏昏沉沉中度过.上班,下班,上网,睡觉.日复一日,月复一月.直到今天想写一个小小的51单片机程序我才发现-我竟然连如何定义端口都忘了.唉.我真的老了么&#8230;&#8230;. 不多说了: 1 2 3 4 5 6 7 8 9 10 11 12 /* 定义管脚编号 定义好之后可以直接这样使用:bee= =1 ; */ sbit beep=P1^6; sbit sela=P2^4; sbit selb=P2^5; &#160; /* 定义一个SFR寄存器: 定义好的寄存器,编译器在产生汇编的时候是直接读写内存 */ sfr isp_data=0xe2; sfr isp_addh=0xe3; // 当执行isp_addh = 05;时,就是把05A直接写到0xe3这个内存位置 &#160; / * 定一个变量. 这个是标准的C了 */ unsigned char a, int b = 55; 今天就先写这么多.等有空再慢慢添加.]]></description>
		<wfw:commentRss>http://isfate.com/546.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>51MCU串口波特率计算工具</title>
		<link>http://isfate.com/456.html</link>
		<comments>http://isfate.com/456.html#comments</comments>
		<pubDate>Tue, 29 Mar 2011 15:23:43 +0000</pubDate>
		<dc:creator>正在戒网</dc:creator>
				<category><![CDATA[嵌入式研究]]></category>
		<category><![CDATA[嵌入式软件]]></category>
		<category><![CDATA[51MCU]]></category>
		<category><![CDATA[波特率计算]]></category>

		<guid isPermaLink="false">http://isfate.com/?p=456</guid>
		<description><![CDATA[我们在配置51的串口时须要根据晶振频率,波特率是多少等等来计算T0或T1值为多少,在以前这是个相麻烦的事情,不过现在这种情况将要被改变了,因为来自jsjjccc大侠为我们编写了一个非常好用的波特率计算工式软件,输入晶振频率,选择波特率后连源代码都自动升成.这样51的串口再也不再麻烦.. 软件功能具体再下图: [box type="download"][/box]]]></description>
		<wfw:commentRss>http://isfate.com/456.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>51单片机,串口演示程式(包含字符串发送)</title>
		<link>http://isfate.com/442.html</link>
		<comments>http://isfate.com/442.html#comments</comments>
		<pubDate>Wed, 23 Mar 2011 01:58:41 +0000</pubDate>
		<dc:creator>正在戒网</dc:creator>
				<category><![CDATA[嵌入式研究]]></category>
		<category><![CDATA[51MCU]]></category>
		<category><![CDATA[串口]]></category>
		<category><![CDATA[字符串]]></category>

		<guid isPermaLink="false">http://isfate.com/?p=442</guid>
		<description><![CDATA[使用串口的中断方式接收,查询发送完成标志.字符串的发送是使用固定的长度方式,没有使用 “\0&#8243;.因为51的内存太小,如果字符串太长就完了. 详见程式如下: #include &#60;reg51.h&#62; &#160; #define string_len 17 //数据长度 &#160; unsigned char inbuf&#91;string_len&#93;; unsigned char count; bit read_flag= 0 ; &#160; void init_serialcomm&#40; void &#41; &#123; SCON = 0x50; //串口方式1,允许接收 PCON &#124;=0x80; //波特率加倍 TMOD = 0x20; //定时器1工作方式2自动重装 TH1= 0xFD;//波特率为19200，11.0592MHz单倍速，SMOD=1，实际波特率为19200.0，误差率为0.00% TL1= 0xFD; TR1 = 1; IE &#124;= 0x90 ; //Enable Serial Interrupt TR1 = 1 [...]]]></description>
		<wfw:commentRss>http://isfate.com/442.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ucos學習筆記之信號量的使用</title>
		<link>http://isfate.com/309.html</link>
		<comments>http://isfate.com/309.html#comments</comments>
		<pubDate>Tue, 01 Dec 2009 10:21:50 +0000</pubDate>
		<dc:creator>正在戒网</dc:creator>
				<category><![CDATA[嵌入式研究]]></category>
		<category><![CDATA[ucos]]></category>
		<category><![CDATA[信號量]]></category>

		<guid isPermaLink="false">http://isfate.com/?p=309</guid>
		<description><![CDATA[臺資黑工廠里寫的,字體為繁體,我也懶的轉換了,反正看的人也不多.. 個人理解信號量的作用:任務之間同步的標識,或是對共享資源操作的一個鎖匙(MS有更強大的互斥型的信號量).總之不管那么多,一個任務可以等待一個信號量.任務或是中斷可以發送信號量,等待信號量的任務在收到信號量的時候就繼續運行.可以多個任務同時等待一個信號量,但只有優先級最高的任務得到信號量并執行.中斷不可使用信號量. 簡單的信號量應用 一:先在OS_CFG.H中把OS_SEM打頭的幾個全部定義為1;OS_MAX_EVENTS為所有的事件數量(包括消息隊列等),定義為多少看情況,我設定為20(每加一個就多用掉了近100字節的RAM). 二:定義一個OS_EVENT弄的指針  方法: OS_EVENT *SBSB; 三:在任務中創建一個信號量    方法: SBSB=OSSemCreate(5);  這樣SBSB就是一個指向了新建的一個信號量.后面那個5表示初始值,表示現在有5個信號量 四:接下來就可以在任務中使用信號量了(中斷中只可以發送信號量)    等待信號量方法:OSSemPend(SBSB,0,&#38;ERROR);   //等待SBSB這個信號量  后面的一個參數為超時,0表示永不超時,時間單位為OS的TIMESTICK,第三個參數為錯誤代碼    發送信號量方法:很簡單 OSSemPost(SBSB);就收工了 下面是我寫的最簡單應用,STM32用的,放到這里,以免以后忘了. #include “stm32f10x_lib.h” #include “includes.h”   OS_STK os_sysinit_stk[60]; OS_STK os_ledshow_stk[60]; OS_STK os_ideluser_stk[60];   void os_sysinit_task(void *pdata) {    INT8U ERROR;  sysinit();  initGPIOA();  while(1)   {   OSSemPend(SEM01,0,&#38;ERROR);   OSTimeDly(40);   GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_RESET);   OSTimeDly(20);   GPIO_WriteBit(GPIOA, GPIO_Pin_1, Bit_SET);   } } void os_ledshow_task(void [...]]]></description>
		<wfw:commentRss>http://isfate.com/309.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>STM32最簡單應用之GPIO點燈</title>
		<link>http://isfate.com/306.html</link>
		<comments>http://isfate.com/306.html#comments</comments>
		<pubDate>Mon, 30 Nov 2009 13:04:29 +0000</pubDate>
		<dc:creator>正在戒网</dc:creator>
				<category><![CDATA[嵌入式研究]]></category>
		<category><![CDATA[GPIO]]></category>
		<category><![CDATA[STM32]]></category>

		<guid isPermaLink="false">http://isfate.com/?p=306</guid>
		<description><![CDATA[老板現在不在,抽空寫一篇文章:STM32的初學者可以看看,老鳥請自覺飄過-_-!. 由于公司為台灣黑工廠,所以所有電腦都是繁體系統,所以所有文字也為繁體的,不過應該不影響閱讀.      剛購入STM32時,對它的資料看的有點頭痛,不過在整理了一下之后就大至清析明了,特別是它的固件庫使用風格比較另類,使用了大量的結構體,然后用整個結構作為固件庫函數的參數,這樣雖然可以減少函數參數的傳遞,但對于習慣了NPX與TI的固件庫來說這樣有點不習慣.     廢話這么多,現在就上我的STM32第一個程式,點亮一個LED!   須要注意的是須要使用固件庫.   GPIO_InitTypeDef GPIOASET;      //定義一個GPIO_InitTypeDef類型的結構  GPIO_DeInit(GPIOA);                       //GPIOA恢復默認值  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);   //先使能GPIO A的時鐘  (幾乎所有的CORTEX-M3核的外設都須要先使能時鐘)  GPIOASET.GPIO_Pin=(GPIO_Pin_0&#124;GPIO_Pin_1);                               /*選擇到GPIO_PIN 0還有1 */  GPIOASET.GPIO_Speed=GPIO_Speed_50MHz;                                    //GPIO的速度  GPIOASET.GPIO_Mode=GPIO_Mode_Out_PP;                                    /*    輸入輸出類型:當然是輸出型的            */  GPIO_Init(GPIOA,&#38;GPIOASET);                                                                  //然后設置GPIO,它是根據GPIOASET中各個成員的值來進行設定的 接下來我們就可以直接使用GPIO了,如果為了效率可以使用匯編或是直接寫寄存器的方法操作,如果無所謂效率就使用固件庫; GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);       //置位相應的LED GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);   //清零相應的LED    這很容易理解.   原文连接：http://mcukaifa.com/mcudesign/cortex/160.html]]></description>
		<wfw:commentRss>http://isfate.com/306.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

