使用timer0中断,将LED灯闪烁
Init.c
/*
* init.c: 进行一些初始化
*/
#include "s3c24xx.h"
void disable_watch_dog(void);
void clock_init(void);
void memsetup(void);
void copy_steppingstone_to_sdram(void);
void init_led(void);
void timer0_init(void);
void init_irq(void);
void delay(int n)
{
int i;
for(i=0;i } /* * 关闭WATCHDOG,否则CPU会不断重启 */ void disable_watch_dog(void) { // 关闭WATCHDOG很简单,往WTCON寄存器写0即可 WTCON = 0; } #define S3C2410_MPLL_200MHZ ((0x5c<<12)|(0x04<<4)|(0x00)) #define S3C2440_MPLL_200MHZ ((0x5c<<12)|(0x01<<4)|(0x02)) /* * 对于MPLLCON寄存器,[19:12]为MDIV,[9:4]为PDIV,[1:0]为SDIV * 有如下计算公式: * S3C2410: MPLL(FCLK) = (m * Fin)/(p * 2^s) * S3C2410: MPLL(FCLK) = (2 * m * Fin)/(p * 2^s) * 其中: m = MDIV + 8, p = PDIV + 2, s = SDIV * 对于本开发板,Fin = 12MHz * 设置CLKDIVN,令分频比为:FCLK:HCLK:PCLK=1:2:4, * FCLK=200MHz,HCLK=100MHz,PCLK=50MHz */ void clock_init(void) { // LOCKTIME = 0x00ffffff; // 使用默认值即可 CLKDIVN = 0x03; // FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1 /* 如果HDIVN非0,CPU的总线模式应该从“fast bus mode”变为“asynchronous bus mode” */ __asm__( "mrc p15, 0, r1, c1, c0, 0n" /* 读出控制寄存器 */ "orr r1, r1, #0xc0000000n" /* 设置为“asynchronous bus mode” */ "mcr p15, 0, r1, c1, c0, 0n" /* 写入控制寄存器 */ ); /* 判断是S3C2410还是S3C2440 */ if ((GSTATUS1 == 0x32410000) || (GSTATUS1 == 0x32410002)) { MPLLCON = S3C2410_MPLL_200MHZ; /* 现在,FCLK=200MHz,HCLK=100MHz,PCLK=50MHz */ } else { MPLLCON = S3C2440_MPLL_200MHZ; /* 现在,FCLK=200MHz,HCLK=100MHz,PCLK=50MHz */ } } /* */ void memsetup(void) { volatile unsigned long *p = (volatile unsigned long *)MEM_CTL_BASE; /* 这个函数之所以这样赋值,而不是像前面的实验(比如mmu实验)那样将配置值 * 写在数组中,是因为要生成”位置无关的代码”,使得这个函数可以在被复制到 * SDRAM之前就可以在steppingstone中运行 ,steppingstone是在S3C2440 中,实际上是一块4k大小的SRAM */ /* 存储控制器13个寄存器的值 */ p[0] = 0x22011110; //BWSCON p[1] = 0x00000700; //BANKCON0 p[2] = 0x00000700; //BANKCON1 p[3] = 0x00000700; //BANKCON2 p[4] = 0x00000700; //BANKCON3 p[5] = 0x00000700; //BANKCON4 p[6] = 0x00000700; //BANKCON5 p[7] = 0x00018005; //BANKCON6 p[8] = 0x00018005; //BANKCON7 /* REFRESH, * HCLK=12MHz: 0x008C07A3, * HCLK=100MHz: 0x008C04F4 */ p[9] = 0x008C04F4; p[10] = 0x000000B1; //BANKSIZE p[11] = 0x00000030; //MRSRB6 p[12] = 0x00000030; //MRSRB7 } void copy_steppingstone_to_sdram(void) { unsigned int *pdwSrc = (unsigned int *)0; unsigned int *pdwDest = (unsigned int *)0x30000000; while (pdwSrc < (unsigned int *)4096) { *pdwDest = *pdwSrc; pdwDest++; pdwSrc++; } } #define GPFCON (*(volatile unsigned long *)0x56000050) #define GPF4_out (1<<(4*2)) #define GPF5_out (1<<(5*2)) #define GPF6_out (1<<(6*2)) /* * K1-K4对应GPG11、GPG3、GPF2、GPF3 */ #define GPG11_eint (2<<(11*2)) // K1,EINT19 #define GPG3_eint (2<<(3*2)) // K2,EINT11 #define GPF3_eint (2<<(3*2)) // K3,EINT3 #define GPF2_eint (2<<(2*2)) // K4,EINT2 void init_led(void) { GPFCON = GPF4_out|GPF5_out|GPF6_out; // 将LED1,2,4对应的GPF4/5/6三个引脚设为输出 } /* * Timer input clock Frequency = PCLK / {prescaler value+1} / {divider value} * {prescaler value} = 0~255 * {divider value} = 2, 4, 8, 16 * 本实验的Timer0的时钟频率=100MHz/(99+1)/(16)=62500Hz * 设置Timer0 0.5秒钟触发一次中断: */ void timer0_init(void) { // 预分频器0 = 99 TCFG0 &= ~0xFF; TCFG0 |= 0x63; // 选择16分频 TCFG1 &= ~0x0F; TCFG1 |= 0x03; // 0.5秒钟触发一次中断 TCNTB0 = 15625;//设定的计数 次数 递减 TCMPB0 = 0;//比较,减到这个数 // 手动更新 TCON &= ~(1<<1); TCON |= 1<<1; // 自动加载,清“手动更新”位,启动定时器0 //TCON &= ~0X03; //TCON |= 0x01; //TCON |= (3<<0); TCON &= ~(1<<1);//清“手动更新”位 TCON |=(1<<3);//自动加载 TCON |=(1<<0);//启动定时器0 } /* * 定时器0中断使能 */ void init_irq(void) { // 定时器0中断使能,INTMSK INTMSK &= ~ (1<<10);//中断屏蔽寄存器 } Interrupt.c #include "s3c24xx.h" int flag=0; void Timer0_Handle(void) { /* * 每次中断令4个LED改变状态 */ unsigned long oft = INTOFFSET;//读取中断偏移量 //成功的 if(oft==10)//根据偏移量,判断是不是timer0中断 { if(flag==0) { GPFDAT &= ~(1<<4|1<<5|1<<6);//亮灯 flag=1; } else { GPFDAT |= (1<<4|1<<5|1<<6);//关灯 flag=0; } SRCPND=SRCPND; INTPND=INTPND; //SRCPND &= ~(1<<10); //INTPND &= ~(1<<10); //SRCPND = 0; //INTPND = 0; } }
上一篇:存储-SDRAM
下一篇:S3C2440开发板上BMP图片的显示之三
推荐阅读
史海拾趣
面对日益激烈的市场竞争,APX Technologies积极寻求与其他企业的合作。公司与一家知名的电子设备制造商达成战略合作协议,共同开发一款具有创新功能的新型智能手机。这款手机的成功上市不仅提升了APX Technologies的品牌知名度,也为其带来了可观的利润。
面对数字化转型的浪潮,Etco Inc公司主动拥抱变革,积极推进数字化转型。公司利用大数据、云计算等先进技术优化生产流程和管理模式,提高了生产效率和管理水平。同时,Etco还加强了与客户的数字化连接和交流,提供了更加便捷和高效的服务体验。这些举措使Etco在数字化时代中保持了领先地位并实现了持续增长。
Acculin Inc深知人才是企业发展的核心。为了吸引和留住优秀人才,公司建立了完善的培训体系,并为员工提供了良好的晋升机会。此外,公司还注重团队建设,通过举办各种团建活动活动增强员工之间的凝聚力。这些举措使得Acculin在人才竞争激烈的市场中保持了优势。
面对未来,科山芯创有着清晰的规划和展望。他们将继续加大研发投入,不断推出更多高性能、高品质的芯片产品;同时,他们还将积极拓展国际市场,提升品牌影响力;此外,科山芯创还将加强与产业链上下游企业的合作,共同推动电子行业的创新与发展。
以上五个故事概述了科山芯创在电子行业中的发展历程和成就。作为一家专注于高性能、高品质射频及模拟集成电路芯片研发与设计的创新型企业,科山芯创以其强大的技术实力和优质的服务赢得了市场的认可和尊重。
人才是企业发展的核心动力。Diconex公司高度重视人才培养和引进工作。公司建立了完善的人才培养机制,为员工提供广阔的发展空间和良好的职业晋升通道。同时,公司还积极引进行业优秀人才,为公司的快速发展提供了有力的人才保障。这种人才战略的成功实施使得Diconex在电子行业中拥有了强大的技术团队和人才队伍。
晶豪科技(ESMT)于1998年由赵瑚博士创立,公司自初创时就立志成为客户各类型内存产品及技术的供应者。经过数年的努力,公司在DRAM产品研发上取得了显著成果,广泛应用于PC外围、信息家电、消费性电子产品及通讯系统等领域。2002年3月,晶豪科技在台湾证券交易所成功挂牌上市(代号3006),这一里程碑事件为公司后续的发展奠定了坚实基础。
BL8505-33 1 SM ,呵呵,最后一个器件终于联系上了,听有的公司说国外都没货了呢,:(\" 峰回路转,试着打了一个网上留的电话,竟然可以免费提供,虽然钱不多,但解决了一个大问题呢,这里感谢下华芯邦的天涯… 查看全部问答∨ |
|
SECTION UND_STACK:DATA:NOROOT(3) SECTION ABT_STACK:DATA:NOROOT(3) SECTION IRQ_STACK:DATA:NOROOT(3) SE ...… 查看全部问答∨ |
vxworks NAT的问题 .只要回复都给分...分不够再加... 版上的各位大侠,有人在vxworks5.4下做过NAT的东西没,能给小弟一点提示吗,现在这个东西已径把我折磨的半死了。 也可以把资料发到我的email中。zhouxiongjun@hotmail.com 谢谢啦。 … 查看全部问答∨ |
MCP2515是CAN总线芯片,收到报文时,如果CANINTE接收位使能,则CANINTF接收位置1并产生中断。 理论上MCU检测到中断后,必须通过SPI对CANINTF接收位清零。可是在中断时,MCU读出CANINTF的 状态有时接收位却是0,有时是1。这是我非常迷惑的地方:MC ...… 查看全部问答∨ |
|
LPC2114 是NXP的ARM7内核芯片, 功能比较多.我从来没有用过该芯片, 由于一个朋友送了我LPC2114的硬件, 想在上面熟悉熟悉LPC2114的功能.由于对该芯片比较陌生, 在网上转了一圈,发现关于该芯片的使用心得或笔记很少,看来该芯片不常用. 到周立功 ...… 查看全部问答∨ |
我用的仿真设备是(msp-fetp4301f1.3)不知道是不是这样看的,使用时是不是直接把它接到计算机的并口就可以开始仿真了?cpu是msp430f149的,如果我要写一个AD采样程序,要不要外加电源?可不可以直接使用例子??… 查看全部问答∨ |
最近在用MSP430F149做一个谐波检测的功能,听说FFT能够实现,但是无从下手,希望高手们能够指教,或给出FFT程序,或给出学习的方法均可,谢谢大家能帮忙了~~~… 查看全部问答∨ |