打印
[新手园地]

Ederdan学习第一帖:GPIO点灯

[复制链接]
1643|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ederdan|  楼主 | 2012-12-29 15:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
废话一番,余自五月得板,值喜庆学习之际,突逢火患,破财挡灾,幸人无恙,留安全大训,一时忙乱纷扰致岁末,枉费多多。
先发学习贴,并望各位达者解惑。
1. 寄存器解锁写入的“59h”, “16h” “88h”是何来历?
2. Delay指令是否跟51一样 为12个机器周期?程序所带附件包所示如下,是否为
void DrvSYS_Delay(uint32_t us)
{
    SysTick->LOAD = us * CyclesPerUs;
    SysTick->VAL  = (0x00);
    SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk;

    /* Waiting for down-count to zero */
    while((SysTick->CTRL & (1 << 16)) == 0);
}

uint32_t SystemCoreClock  = __HSI;   /*!< System Clock Frequency (Core Clock) */
uint32_t CyclesPerUs      = (__HSI / 1000000); /* Cycles per micro second */


#include <stdio.h>
#include"NUC1xx.h"
#include"DrvGPIO.h"
#include"DrvSYS.h"

int main(void)
{
   //  有些系统控制寄存器需要被保护起来,以防止误操作而影响芯片运行,这些寄存器在上电复位到用   
   //   户解锁之前是锁定的。用户可以连续依次写入“59h”, “16h” “88h”到寄存器REGWRPROT (地址:
   //   0x5000_0100)解锁定。在这三个数据之间写入任何其他数据,不同时序或写入其他地址都会中止     
   //  整个时序,导致无法解锁.                                                                  
   //   解锁后,用户可以检测解锁指示位:0x5000_0100 的bit0,“1“表示已经解锁定,”0“表示锁定。  
   //   用户可以更新目标寄存器的值,向“0x5000_0100”写入任何值,就可以重锁保护寄存器.            
   //   该位寄存器用于禁止/使能保护寄存器,读取得到REGPROTDIS状态                                 
     int32_t DrvSYS_UnlockProtectedReg(void);
     
     // PWRCON地址为CLK_BA(0x5000_0200)+0x00,复位后值为0x0000_001X,在bit0该位的缺省值由flash控制  
     // 器设置,用户配置寄存器config0 [26:24]. 当缺省时钟源为4~24 MHz晶振. 该位自动置1              
   // 1 = 使能外部4~24 MHz 高速晶振, 0 = 禁止外部4~24 MHz 高速晶振                                
     // 在flash Config0 (Address = 0x0030_0000)中,复位后CPU时钟源选择                              
   //  FOSC[2:0]  时钟源                                                                          
   //  000  外部4~24 MHz 高速晶振时钟                                                            
   //  Others  保留                                                                              
   // 复位后,CFOSC的值将被加载到系统寄存器CLKSEL0.HCLK_S[2:0].                                   
     DrvSYS_SetOscCtrl (E_SYS_XTL12M, 1);
     LOCKREG();                                //锁寄存器
      
     while(1)                                                     
     {
        DrvGPIO_ClrBit(E_GPA, 2);                                 //  LED1 亮
        DrvSYS_Delay(12000000);
        DrvGPIO_SetBit(E_GPA, 2);
        DrvGPIO_ClrBit(E_GPA, 3);                                 //  LED2 亮
        DrvSYS_Delay(12000000);
        DrvGPIO_SetBit(E_GPA, 3);
        DrvGPIO_ClrBit(E_GPA, 4);                                 //  LED3 亮
        DrvSYS_Delay(12000000);
        DrvGPIO_SetBit(E_GPA, 4);
        DrvGPIO_ClrBit(E_GPA, 5);                                 //  LED4 亮
        DrvSYS_Delay(12000000);               
        DrvGPIO_SetBit(E_GPA, 5);
     }
      
}

相关帖子

沙发
mcs8098| | 2012-12-29 23:16 | 只看该作者
顶,好久没见新帖子了

使用特权

评论回复
板凳
ederdan|  楼主 | 2012-12-29 23:26 | 只看该作者
本帖最后由 ederdan 于 2012-12-29 23:56 编辑

哈哈,谢谢顶贴,事情太多了,后续会把整个例程学习笔记发出来,望各位多多指点

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:2014,你好

10

主题

265

帖子

0

粉丝