这么点破玩艺,昨天我为了学会它,花了六小时
2014-10-20 16:13
134 查看
#define GLOBAL_CLK 1
#include <stdlib.h>
#include <string.h>
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
#include "mmu.h"
#include "profile.h"
#include "memtest.h"
void LEDInit()
{
rGPBCON &= ~(3<<10 | 3<<12 | 3<<14 | 3<<16);
rGPBCON |= (1<<10 | 1<<12 | 1<<14 | 1<<16);
}
void LEDOpen()
{
rGPBDAT &= ~(1<<5 | 1<<6 | 1<<7 | 1<<8);
}
void LEDClose()
{
rGPBDAT |= (1<<5 | 1<<6 | 1<<7 | 1<<8);
}
int LEDOpenI( int index )
{
if( index <= 0 )
{
return 0;
}
if( index >= 5 )
{
return 0;
}
rGPBDAT &= ~( 1 << ( index + 4 ) );
return 1;
}
int LEDCloseI( int index )
{
if( index <= 0 )
{
return 0;
}
if( index >= 5 )
{
return 0;
}
rGPBDAT |= ( 1 << ( index + 4 ) );
return 1;
}
void BeepInit()
{
rGPBCON &= ~3;
rGPBCON |= 1;
}
void BeepStop()
{
rGPBDAT &= ~( 0x01 );
}
void BeepRun()
{
rGPBDAT |= 0x01;
}
__inline void ButtonProc1()
{
LEDOpenI( 1 );
}
__inline void ButtonProc2()
{
LEDOpenI( 2 );
}
__inline void ButtonProc3()
{
LEDOpenI( 3 );
}
__inline void ButtonProc4()
{
LEDOpenI( 4 );
}
__inline void ButtonProc5()
{
BeepRun();
}
__inline void ButtonProc6()
{
LEDClose();
BeepStop();
}
static void __irq ButtonCallBack()
{
if( rEINTPEND & ( 1 << 8 ) )
{
ButtonProc1();
rEINTPEND |= ( 1 << 8 );
ClearPending( BIT_EINT8_23 );
}
if( rEINTPEND & ( 1 << 11 ) )
{
ButtonProc2();
rEINTPEND |= ( 1 << 11 );
ClearPending( BIT_EINT8_23 );
}
if( rEINTPEND & ( 1 << 13 ) )
{
ButtonProc3();
rEINTPEND |= ( 1 << 13 );
ClearPending( BIT_EINT8_23 );
}
if( rEINTPEND & ( 1 << 14 ) )
{
ButtonProc4();
rEINTPEND |= ( 1 << 14 );
ClearPending( BIT_EINT8_23 );
}
if( rEINTPEND & ( 1 << 15 ) )
{
ButtonProc5();
rEINTPEND |= ( 1 << 15 );
ClearPending( BIT_EINT8_23 );
}
if( rEINTPEND & ( 1 << 19 ) )
{
ButtonProc6();
rEINTPEND |= ( 1 << 19 );
ClearPending( BIT_EINT8_23 );
}
}
void ButtonInit( unsigned unFunCallBack )
{
rGPGCON &= ~3;
rGPGCON |= 2;
rGPGCON &= ~( 3 << ( 2 * 3 ) );
rGPGCON |= ( 2 << ( 2 * 3 ) );
rGPGCON &= ~( 3 << ( 2 * 5 ) );
rGPGCON |= ( 2 << ( 2 * 5 ) );
rGPGCON &= ~( 3 << ( 2 * 6 ) );
rGPGCON |= ( 2 << ( 2 * 6 ) );
rGPGCON &= ~( 3 << ( 2 * 7 ) );
rGPGCON |= ( 2 << ( 2 * 7 ) );
rGPGCON &= ~( 3 << ( 2 * 11 ) );
rGPGCON |= ( 2 << ( 2 * 11 ) );
rEXTINT1 &= ~ 0xf;
rEXTINT1 &= ~ 0xf000;
rEXTINT1 &= ~ 0xf00000;
rEXTINT1 &= ~ 0xf000000;
rEXTINT1 &= ~0xf0000000;
rEXTINT2 &= ~ 0xf000;
rEINTPEND |= 1<<8;
rEINTPEND |= 1<<11;
rEINTPEND |= 1<<13;
rEINTPEND |= 1<<14;
rEINTPEND |= 1<<15;
rEINTPEND |= 1<<19;
rEINTMASK &= ~( 1 << 8 );
rEINTMASK &= ~( 1 << 11 );
rEINTMASK &= ~( 1 << 13 );
rEINTMASK &= ~( 1 << 14 );
rEINTMASK &= ~( 1 << 15 );
rEINTMASK &= ~( 1 << 19 );
pISR_EINT8_23 = ( ( 0 == unFunCallBack ) ? ( (unsigned)ButtonCallBack ) : ( unFunCallBack ) ) ;
rINTMSK &= ~(BIT_EINT8_23);
}
__inline void TimerCallBackProc()
{
if( rGPBDAT & ( 1 << 5 ) )
{
rGPBDAT &= ~( 1 << 5 );
}
else
{
rGPBDAT |= ( 1 << 5 );
}
}
static void __irq TimerCallBack()
{
ClearPending( BIT_TIMER0 );
TimerCallBackProc();
}
void TimerInit()
{
rTCFG0 = 49;
rTCFG1 = 0x03;
rTCNTB0 = 62500/2;
rTCMPB0 = 0;
rTCON |= (1<<1);
rTCON = 0x09;
rPRIORITY = 0x00000000;
rINTMOD |= 0x00000000;
ClearPending(BIT_TIMER0);
pISR_TIMER0 = (U32)TimerCallBack;
EnableIrq(BIT_TIMER0);
}
void MySetClock()
{
U32 UPLL;
U8 m, p, s, hdiv, pdiv;
m = 92;
p = 1;
s = 1;
hdiv = 2;
pdiv = 1;
rMPLLCON = (m<<12 | p<<4 | s);
rCLKDIVN = (hdiv<<1 | pdiv);
MMU_SetAsyncBusMode();
FCLK = ((m+8)*(FIN/100) *2)/((p+2)*(1<<s))*100;
HCLK = FCLK/4;
PCLK = HCLK/2;
UPLL = ((56+8)*FIN)/((2+2)*(1<<2));
UCLK = UPLL;
}
void Main()
{
MMU_Init();
LEDInit();
ButtonInit( 0 );
BeepInit();
MySetClock();
TimerInit();
while( 1 );
}
#include <stdlib.h>
#include <string.h>
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
#include "mmu.h"
#include "profile.h"
#include "memtest.h"
void LEDInit()
{
rGPBCON &= ~(3<<10 | 3<<12 | 3<<14 | 3<<16);
rGPBCON |= (1<<10 | 1<<12 | 1<<14 | 1<<16);
}
void LEDOpen()
{
rGPBDAT &= ~(1<<5 | 1<<6 | 1<<7 | 1<<8);
}
void LEDClose()
{
rGPBDAT |= (1<<5 | 1<<6 | 1<<7 | 1<<8);
}
int LEDOpenI( int index )
{
if( index <= 0 )
{
return 0;
}
if( index >= 5 )
{
return 0;
}
rGPBDAT &= ~( 1 << ( index + 4 ) );
return 1;
}
int LEDCloseI( int index )
{
if( index <= 0 )
{
return 0;
}
if( index >= 5 )
{
return 0;
}
rGPBDAT |= ( 1 << ( index + 4 ) );
return 1;
}
void BeepInit()
{
rGPBCON &= ~3;
rGPBCON |= 1;
}
void BeepStop()
{
rGPBDAT &= ~( 0x01 );
}
void BeepRun()
{
rGPBDAT |= 0x01;
}
__inline void ButtonProc1()
{
LEDOpenI( 1 );
}
__inline void ButtonProc2()
{
LEDOpenI( 2 );
}
__inline void ButtonProc3()
{
LEDOpenI( 3 );
}
__inline void ButtonProc4()
{
LEDOpenI( 4 );
}
__inline void ButtonProc5()
{
BeepRun();
}
__inline void ButtonProc6()
{
LEDClose();
BeepStop();
}
static void __irq ButtonCallBack()
{
if( rEINTPEND & ( 1 << 8 ) )
{
ButtonProc1();
rEINTPEND |= ( 1 << 8 );
ClearPending( BIT_EINT8_23 );
}
if( rEINTPEND & ( 1 << 11 ) )
{
ButtonProc2();
rEINTPEND |= ( 1 << 11 );
ClearPending( BIT_EINT8_23 );
}
if( rEINTPEND & ( 1 << 13 ) )
{
ButtonProc3();
rEINTPEND |= ( 1 << 13 );
ClearPending( BIT_EINT8_23 );
}
if( rEINTPEND & ( 1 << 14 ) )
{
ButtonProc4();
rEINTPEND |= ( 1 << 14 );
ClearPending( BIT_EINT8_23 );
}
if( rEINTPEND & ( 1 << 15 ) )
{
ButtonProc5();
rEINTPEND |= ( 1 << 15 );
ClearPending( BIT_EINT8_23 );
}
if( rEINTPEND & ( 1 << 19 ) )
{
ButtonProc6();
rEINTPEND |= ( 1 << 19 );
ClearPending( BIT_EINT8_23 );
}
}
void ButtonInit( unsigned unFunCallBack )
{
rGPGCON &= ~3;
rGPGCON |= 2;
rGPGCON &= ~( 3 << ( 2 * 3 ) );
rGPGCON |= ( 2 << ( 2 * 3 ) );
rGPGCON &= ~( 3 << ( 2 * 5 ) );
rGPGCON |= ( 2 << ( 2 * 5 ) );
rGPGCON &= ~( 3 << ( 2 * 6 ) );
rGPGCON |= ( 2 << ( 2 * 6 ) );
rGPGCON &= ~( 3 << ( 2 * 7 ) );
rGPGCON |= ( 2 << ( 2 * 7 ) );
rGPGCON &= ~( 3 << ( 2 * 11 ) );
rGPGCON |= ( 2 << ( 2 * 11 ) );
rEXTINT1 &= ~ 0xf;
rEXTINT1 &= ~ 0xf000;
rEXTINT1 &= ~ 0xf00000;
rEXTINT1 &= ~ 0xf000000;
rEXTINT1 &= ~0xf0000000;
rEXTINT2 &= ~ 0xf000;
rEINTPEND |= 1<<8;
rEINTPEND |= 1<<11;
rEINTPEND |= 1<<13;
rEINTPEND |= 1<<14;
rEINTPEND |= 1<<15;
rEINTPEND |= 1<<19;
rEINTMASK &= ~( 1 << 8 );
rEINTMASK &= ~( 1 << 11 );
rEINTMASK &= ~( 1 << 13 );
rEINTMASK &= ~( 1 << 14 );
rEINTMASK &= ~( 1 << 15 );
rEINTMASK &= ~( 1 << 19 );
pISR_EINT8_23 = ( ( 0 == unFunCallBack ) ? ( (unsigned)ButtonCallBack ) : ( unFunCallBack ) ) ;
rINTMSK &= ~(BIT_EINT8_23);
}
__inline void TimerCallBackProc()
{
if( rGPBDAT & ( 1 << 5 ) )
{
rGPBDAT &= ~( 1 << 5 );
}
else
{
rGPBDAT |= ( 1 << 5 );
}
}
static void __irq TimerCallBack()
{
ClearPending( BIT_TIMER0 );
TimerCallBackProc();
}
void TimerInit()
{
rTCFG0 = 49;
rTCFG1 = 0x03;
rTCNTB0 = 62500/2;
rTCMPB0 = 0;
rTCON |= (1<<1);
rTCON = 0x09;
rPRIORITY = 0x00000000;
rINTMOD |= 0x00000000;
ClearPending(BIT_TIMER0);
pISR_TIMER0 = (U32)TimerCallBack;
EnableIrq(BIT_TIMER0);
}
void MySetClock()
{
U32 UPLL;
U8 m, p, s, hdiv, pdiv;
m = 92;
p = 1;
s = 1;
hdiv = 2;
pdiv = 1;
rMPLLCON = (m<<12 | p<<4 | s);
rCLKDIVN = (hdiv<<1 | pdiv);
MMU_SetAsyncBusMode();
FCLK = ((m+8)*(FIN/100) *2)/((p+2)*(1<<s))*100;
HCLK = FCLK/4;
PCLK = HCLK/2;
UPLL = ((56+8)*FIN)/((2+2)*(1<<2));
UCLK = UPLL;
}
void Main()
{
MMU_Init();
LEDInit();
ButtonInit( 0 );
BeepInit();
MySetClock();
TimerInit();
while( 1 );
}
相关文章推荐
- 一个上午,就他妈整了这么点破玩艺
- 昨天学会了仰泳,太好玩了
- (c++)小乐同学学会了用程序做进制转换,异常高兴。小鹏为了不让他骄傲自满,决定出道难点的题目考考他。字母集A到Z,依次表示26到1,26个数字。也就是A=26,B=25...Z=1。他用这些字符来构
- 折腾了这么多年的.NET开发,也只学会了这么几招 软件开发不是生活的全部,但是好的生活全靠它了
- 2004-4-28 18:02:01 为了昨天的承诺
- 我们是为了什么活的这么累
- 我们这么努力,也不过是为了成为普通____人文 / 我是谁家那小谁的日记
- [转贴]为了获得有尊严的生活,你必须在年轻时学会赚钱
- 我们这么努力,也不过是为了成为一个普通人
- 转:学习为了什么?我一直说学习是为了学会更好的思考,其实更通俗的讲学习是为了避免犯大错误
- 学会弯腰,是为了挺直腰板 推荐
- 昨天参加了雅虎校园招聘的在线考试,选择的语言类别是C++,其中遇到了这么两道题:
- 这个是我昨天刚学会的一个JQ效果,希望各位点评一下
- 昨天老婆为了车的事情和我发脾气了
- 我们这么努力,也不过是为了成为一…
- 我是这么配置mariadb的。 为了能够操作汉字数据~
- 昨天刚看了Handler和HandlerThread这个东西,不明白为什么要用这么复杂的东西,而且Handler直接post的话好像还不是子线程运行。那我再开发的时候直接用Thread行不行?两个有什么区别?
- 傅里叶变换就是这么简单,您学会了吗?
- 造物弄人~这一辈子这么折腾到底为了什么?