日历
网志分类
· 所有网志 (5)
· PCB (0)
· ARM (1)
· 设计 (0)
· 杂谈 (3)
· FORHH (1)
最新的评论
站内搜索
友情链接
· 我的歪酷 非非共享界
· forhh

订阅 RSS

0003527

歪酷博客

关中“博客”

    关中之名,始于战国时期,因其西有散关(大散关),东有函谷关,南有武关,北有萧关,取意四关之中。关中人习惯在某个人的职业后面加上个“客”(音KEI 二声)字来称呼这个人,一是称谓,另一是直接指出这人的职业,譬如以做饭为生的称为“勺勺(音SHUO 二声)客”;以做豆腐维持生计的就叫“豆腐客”;帮人种瓜的喊“瓜客”;给人割麦的是“麦客”,既而我为“博客”。


forwd @ 2007-09-10 13:47

他将是你的新郎
从今以后他就是你一生的伴
他的一切都将和你紧密相关
福和祸都要同当

她将是你的新娘
她是别人用心托付在你手上
你要用你一生加倍照顾对待
苦或喜都要同享

一定是特别的缘份
才可以一路走来变成了一家人
他多爱你几分
你多还他几分
找辛福的可能
从此不再是一个人
要处处时时想着念的都是"我们"
你付出了几分
爱就圆满了几分


 
forwd @ 2007-09-04 15:33

本程序为samsungS3C44b0x芯片的定时中断程序,可以设置定时器05

本程序的特点:
1.
只需设置所需的中断频率Hz,以及开启与否(10)即可,所有寄存器的配置由程序完成;
2.
所有寄存器配置,只配置和功能相关的寄存器,以及寄存器的相关位,而不影响其他部分。
因此,本程序可以全部或部分的复制到读者的程序中,而不会影响作者程序其他部分的功能;

编程思想:
定时器的定时中断涉及MClkPrescalerMuxTCNT等寄存器,其中PrecalerTCNT的取值
均可在一定范围内任意取值,Prescaler的范围较小,而TCNT范围较宽。Mux只可取有限的几
个值。因此程序中,先固定Precaler值,并试探取一个Mux值时,能否顺利得到允许的TCNT
若能则表示可以成功配置,则记下此时的几个值,并配置寄存器。如不能,则阶梯增加Precaler
的值,再试探至成功。
建议:
大家也编一些只和使用参数(如中断频率和开启)相关的子程序,而实现功能的寄存器由程序自动
计算并不配置完成,遵循本程序特点的12两条编写的程序,使用起来会很方便,可移植性较好。

程序说明:
1. 6
个定时器均使用连续中断模式,例程中关掉了定时器3
2.
本程序在ADS1.2SDT2.51中,使用简易JTAG调试通过;
3.
本贴内容只包含程序的主要部分,其余部分和网络上流传的程序相同,包括inc,44blinb,44binit等;
4.
由于程序中先计算频率配置寄存器,后决定是否开启寄存器,即使不用的定时器,也需要配置其频率;


//44BTEST : timer.c
/* timer.c
samsungS3C44b0x芯片的定时中断程序,可以设置定时器05的定时中断 */
/*
只需设置所需的中断频率Hz,以及开启与否(10)即可,所有寄存器的配置由程序完成 */
/*
作者:hawkzone 版权归作者所有:2004 */
/*
欢迎大家检查、使用、完善,并传播 */
/*
发表于:www.devarm.com(www.devarm.com) 20040622*/

#include "myinc.h"

void __irq Timer0Done(void);
void __irq Timer1Done(void);
void __irq Timer2Done(void);
void __irq Timer3Done(void);
void __irq Timer4Done(void);
void __irq Timer5Done(void);
/************************************************
* Timer 0 & 1 interrupt *
************************************************/
void Timer01Start(U32 freq0,U32 freq1,U8 start0,U8 start1)
// if one of time0 & time1 is used, freq0 & freq1 are needed and the same value are recommended.
{
U32 mux,pre,tmp;
Uart_Printf("[Timer 01 Interrupt test]
");

rINTMSK = rINTMSK & (~(BIT_GLOBAL|BIT_TIMER0|BIT_TIMER1));
pISR_TIMER0=(unsigned)Timer0Done;
pISR_TIMER1=(unsigned)Timer1Done;
if (start0 | start1)
{
pre = 15;
while( pre<256)
{
tmp=0;
if( MCLK/(2*freq0*pre) <=65535 & MCLK/(2*freq1*pre) <65535)
{
rTCFG1 = ( rTCFG1 | 0x00 ) & 0x0fffff00; //all interrupt,mux=1/2
mux = 2;
}
else if( MCLK/(4*freq0*pre) <=65535 & MCLK/(4*freq1*pre) <65535)
{
rTCFG1 = ( rTCFG1 | 0x11 ) & 0x0fffff11; //all interrupt,mux=1/4
mux = 4;
}
else if( MCLK/(8*freq0*pre) <=65535 & MCLK/(8*freq1*pre) <65535)
{
rTCFG1 = ( rTCFG1 | 0x22 ) & 0x0fffff22; //all interrupt,mux=1/8
mux = 8;
}
else if( MCLK/(16*freq0*pre) <=65535 & MCLK/(16*freq1*pre) <65535)
{
rTCFG1 = ( rTCFG1 | 0x33 ) & 0x0fffff33; //all interrupt,mux=1/16
mux = 16;
}
else if( MCLK/(32*freq0*pre) <=65535 & MCLK/(32*freq1*pre) <65535)
{
rTCFG1 = ( rTCFG1 | 0x44 ) & 0x0fffff44; //all interrupt,mux=1/32
mux = 32;
}
else
{
pre = pre+16;
tmp=1;
}
if (tmp==0)
break;
}

rTCFG0 = ( rTCFG0 | pre ) & (0xffffff00 |pre); //dead zone=0

rTCNTB0 = MCLK/(freq0*pre*mux);
rTCNTB1 = MCLK/(freq1*pre*mux);

if (start0 == 0)
{
rTCON = rTCON & 0xfffffffe; //stop timer0
}
else
{
rTCON = ( rTCON | 0x02 ) & 0xfffffff2;
rTCON = ( rTCON | 0x09 ) & 0xfffffff9;
}
if (start1 == 0)
{
rTCON = rTCON & 0xfffffffd; //stop timer1
}
else
{
rTCON = ( rTCON | 0x0200 ) & 0xfffff2ff;
rTCON = ( rTCON | 0x0900 ) & 0xfffff9ff;
}
}
}
/************************************************
* Timer 0 & 1 interrupt code end*
************************************************/
/************************************************
* Timer 2 & 3 interrupt *
************************************************/
Timer 2 & 3
1 & 2类似,在此暂删掉
Timer 4 & 5
其实与其他的也类似,当寄存器稍不一样,保留
/************************************************
* Timer 4 & 5 interrupt code end*
************************************************/
/************************************************
* Timer 0 ~ 5 interrupt service routine *
************************************************/
void __irq Timer0Done(void)
{
rI_ISPC=BIT_TIMER0;
Uart_Printf("
Timer 0 has interruptted");
}
void __irq Timer1Done(void)
{
rI_ISPC=BIT_TIMER1;
Uart_Printf("
Timer 1 has interruptted");
}
void __irq Timer2Done(void)
{
rI_ISPC=BIT_TIMER2;
Uart_Printf("
Timer 2 has interruptted");
}
void __irq Timer3Done(void)
{
rI_ISPC=BIT_TIMER3;
Uart_Printf("
Timer 3 has interruptted");
}
void __irq Timer4Done(void)
{
rI_ISPC=BIT_TIMER4;
Uart_Printf("
Timer 4 has interruptted");
}
void __irq Timer5Done(void)
{
rI_ISPC=BIT_TIMER5;
Uart_Printf("
Timer 5 has interruptted");
}
/************************************************
* Timer 0 ~ 5 interrupt service routine end *
************************************************/
void Main()
{

rSYSCFG=CACHECFG; // Using 8KB Cache//


Port_Init();
Uart_Init(0,57600);
Delay(10);
Uart_Select(0); //Select UART0
Led_Display(0x01);


Timer01Start(1,1,1,1);

Timer23Start(1,1,1,0);
/*
由于程序中先计算频率配置寄存器,后决定是否开启寄存器,即使不用的定时器,也需要配置其频率; */
Timer45Start(1,1,1,1);


while(1)
{
//KICK_DOG;
}

}



 
forwd @ 2007-09-03 16:24

        关中之名,始于战国时期,因其西有散关(大散关),东有函谷关,南有武关,北有萧关,取意四关之中。关中人习惯在某个人的职业后面加上个“客”(音KEI 二声)字来称呼这个人,一是称谓,另一是直接指出这人的职业,譬如以做饭为生的称为“勺勺(音SHUO 二声)客”;以做豆腐维持生计的就叫“豆腐客”;帮人种瓜的喊“瓜客”;给人割麦的是“麦客”,既而我为“博客”,那为什么又是关中“博客”?
        我打娘胎出来便坠落在关中黄土堆中。我对关中的黄土记忆最深刻的是小时候,夏天天气干热,人踩车压,路上便积了一层细细的尘土,厚的时候可以没过脚踝。我们撅着屁股趴在地上用手将尘土攒成一堆,把双脚埋在里面,细腻而烫热的黄土敷在脚面上润热的感觉至今难忘。完后用脚鼓足力气一踩尘土堆,悉尼的黄土便映着笑脸漫天飞开。我已经因上学离开家五年了,可能我还会为了最爱的人留在这个城市,但我时刻知道自己是渭水河边的关中人。
         人人都会夸自己的家乡有多好,有多美。但我很明白,关中也有她不好的一面,不美的一面。但我生于关中,长于关中,永远是秦渭关中人,既而为关中“博客”。


 
forwd @ 2007-09-03 15:27

      最初对“博客”的印象以为她跟论坛上发的帖子一样,内容确实包罗万象,无奇不有,但却很少有能吸引我安心从头到尾读一遍的。究其原因,因为帖子是发给别人看的,为了能吸引人,发帖者挠破头皮地想一些让你想入非非的名字,如磁场一样吸引你的鼠标去点击,看过也许你哈哈一笑,或者破口大骂,还有可能捶胸顿足,所以它只是娱乐。帖子也许可以让你多一些和朋友们饭后的谈资,蹲在厕所闲聊的话题,但永远不会有人说:根据某某论坛某某热帖得出人是由猿猴进化来的。
     因此,那时我轻蔑的瞅了瞅“博客”,继续看帖。对博客认识的转变,是因为最近要经常要搜索一些生僻的技术性的资料,而有些高人的博客给了我很大的帮助和指导,感激之余,无以为报,便决定把自己学到的也写入博客,也许能帮助别人。从而我对博客有了崭新的认识,博客是自己写给自己,惠及他人。恰好终于我每天也有些许无聊的时间可以消耗在网上,便随即开博。在这个日记本早已远去,博物馆里的古籍字画都面临虫蚀鼠咬,霉潮腐坏的时代,博客(网络日志)或许可以为我留一点东西。