DSP28335笔记——系统时钟 和 GPIO

DSP28335笔记——系统时钟 和 GPIO

闲谈

原本信誓旦旦的说要在这个寒假拓展自己能力为一年后毕业工作提高自我竞争力,但是事实证明人类的惰性实在难以克服。开发板到手有三天,在没有外界压力情况下的自我学习效率也确实低的可怜,没办法只好自己给自己施加压力了。希望能够通过博客给自己的学习做个记录,同时也能实现自我监督的目的。

文章目录

  • DSP28335笔记——系统时钟 和 GPIO
  • 闲谈
  • 一、DSP28335简介
  • 二、系统时钟
    • 1.时钟框图
    • 2.代码实现
  • 三、GPIO点亮LED
    • 1.GPIO方框图
    • 2.对应寄存器:
    • 3.相关代码实现
  • THE END


一、DSP28335简介

  1. 主频:150MHz
  2. 1.9V/1.8V内核,3.3V I/O电压
  3. 支持单精度浮点运算
  4. 哈佛总线架构
  5. 六通道DMA处理器
  6. 十八个PWM输出
  7. 六个高分辨率脉宽调制器(HRPWM)
  8. 两个正交编码器接口
  9. 八个32位定时器
  10. 三个SCI(uart)接口
  11. 两个CAN模块
  12. 一个SPI模块
  13. 一个I2C模块
  14. 十六通道12位ADC模块

二、系统时钟

1.时钟框图

DSP28335笔记——系统时钟 和 GPIO_第1张图片
根据框图,X1和X2引脚连接30MHz晶振,通常配置PLL为10倍频,DIVSEL为2分频,从而获得150MHz的系统主频。

2.代码实现

通过改写TI提供的源代码实现系统主频的修改;

//---------------------------------------------------------------------------
// InitSysCtrl:
//---------------------------------------------------------------------------
// 这段函数的功能就是将系统控制寄存器初始化到想要的状态;
//具体步骤可以分成四部分:
// - 禁止看门狗电路
// - 给PLLCR寄存器赋值以获得想要的系统时钟频率
// - 给高、低速外设时钟预定标寄存器赋值以获得想要的高、低速外设时钟频率
// - 对需要使用的外设时钟进行使能

void InitSysCtrl(void)
{

   // Disable the watchdog
   DisableDog();

   // Initialize the PLL control: PLLCR and DIVSEL
   // DSP28_PLLCR and DSP28_DIVSEL are defined in DSP2833x_Examples.h
   InitPll(DSP28_PLLCR,DSP28_DIVSEL);//主频150M
	/*
	通过修改DSP28_PLLCR,DSP28_DIVSEL对应的宏定义值实现主频的改变
	*/

   // Initialize the peripheral clocks
   InitPeripheralClocks();
}

(快捷键:按住Ctrl左键点击对应变量,跳转至声名位置)

三、GPIO点亮LED

根据以往学习经验,完成GPIO的配置也就应该和STM32大致相同。首先放出GPIO的框图:

1.GPIO方框图

DSP28335笔记——系统时钟 和 GPIO_第2张图片

2.对应寄存器:

本节只了解最基础的GPIO功能。
GPIO分A(Pin0 ~ 31)、B(Pin32 ~ 63)、C(Pin64 ~ 87)三组,只需要了解一组即可。

控制寄存器 对应功能
MUX1/2 引脚功能选择(具体分配看数据手册)
DIR 方向寄存器
PUD 上拉禁用寄存器
数据寄存器 对应功能
DAT 数据寄存器
SET 数据设定寄存器
CLEAR 数据清除寄存器
TOGGLE 数据翻转寄存器

3.相关代码实现

根据原理图,完成引脚Pin60的相关初始化:GPIO输出模式,上拉不禁用

void LED_Init(void)
{
    EALLOW;//关闭写保护

    SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;    //开启GPIO时钟

    GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 0;    //设置为通用GPIO功能
    GpioCtrlRegs.GPBDIR.bit.GPIO60 = 1;     //设置GPIO为输出
    GpioCtrlRegs.GPBPUD.bit.GPIO60 = 0;     //设置上拉电阻

    GpioDataRegs.GPBSET.bit.GPIO60 = 1;     //设置GPIO输出高电平

    EDIS;//开启写保护
}
(部分寄存器存在写保护功能,当无法分清该寄存器是否有该功能时,通通在函数前后添加 **EALLOW;**和 **EDIS;** )

主函数中通过不断翻转引脚电平状态实现LED灯的闪烁。

void main()
{
    InitSysCtrl();//系统时钟初始化
    LED_Init();//LED驱动初始化

    while(1)
    {
        GpioDataRegs.GPBTOGGLE.bit.GPIO60 = 1;//翻转Pin60电平
        delay();
    }
}

最后,通过烧写入RAM进行调试观察现象。
(DSP通过在工程中添加不同的cmd文件——内存映射,实现将程序烧写入RAM或FLASH的选择。)

THE END

本次文章内容相对简单,但主要目的为督促自己开始认真学习。

你可能感兴趣的:(嵌入式,dsp)