凌亂的DSP筆記(2)-LED流水燈


1. F28335的時鍾系統

1.1 時鍾來源

image

F28335的時鍾源有兩種:

  1. 采用外部振盪器作為時鍾源(簡稱外部時鍾),在XCLKIN引腳提供一個一定頻率的時鍾信號,或通過復用的X1引腳接入,即由其他數字系統或外部振盪器引入;
  2. 采用F28335內部振盪器作為時鍾源(簡稱內部時鍾),在X1與X2之間接入一個晶體,就可以產生時鍾源。

外部時鍾源信號有兩種:

  1. 3.3V外部時鍾源信號直接接入XCLKIN引腳,X1引腳接地,X2引腳懸空;
  2. 1.9V外部時鍾源信號直接接入X1引腳,XCLKIN引腳接地,x2引腳懸空。

內部信號時鍾源接法:

image

典型做法是在X1和X2之間接入30MHz晶振,內部鎖相環10倍頻,然后二分頻。

鎖相環模塊除了為C28X內核提供時鍾外,還通過系統時鍾輸出提供快速和慢速2中外設時鍾,從而提高處理器的靈活性和可靠性。在具體應用中,將不使用的外設時鍾禁止,還可以降低系統功耗。

1.2 時鍾單元相關寄存器

未標題-1

1. 鎖相環狀態寄存器PLLSTS

  • 15~9位:保留;
  • 8~7位:DIVSEL,時鍾分頻選擇;
    • 00 01——4分頻
    • 10——2分頻
    • 11——1分頻
  • 6位:MCLKOFF,丟失時鍾檢測關閉位;
    • 0——默認設置,主振盪器時鍾丟失檢測使能
    • 1——主振盪器時鍾丟失檢測禁止
  • 5位:OSCOFF,控制振盪器時鍾信號,該位為1,振盪器信號允許通過,兵分兩路,一路直接過去,一路進入鎖相環模塊;
  • 4位:MCLKCLR,丟失時鍾清除位,若該位寫0,無效,寫1強制丟失時鍾信號檢測電路清除和復位;
  • 3位:MCLKSTS, 丟失時鍾信號狀態位,0為正常模式,表示時鍾信號沒有丟失,1表示時鍾信號丟失,CPU工作在無序頻率模式;
  • 2位:PLLOFF,鎖相器關閉位;
  • 1位:保留;
  • 0位:PLLOCKS:鎖相器鎖狀態位。

2. 高/低速外設時鍾預分頻寄存器HISPCP/LOSPCP

高速外設時鍾預分頻寄存器位分配:

image

低速外設時鍾預分頻寄存器位分配:

image

3. 鎖相環控制寄存器PLLCR

image

時鍾初始化函數:

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);

   // Initialize the peripheral clocks
   InitPeripheralClocks();
}

image

image

2. GPIO介紹

2.1 GPIO分組

GPIO(general purpose intput output)是通用輸入輸出端口的簡稱,可以通過軟件來控制其輸入和輸出。

TMS320F28335共有176引腳,其中88個是GPIO管腳。

A組:GPIO 0~31,B組:GPIO 32~63,C組:GPIO 64~87。

image

2.2 采樣

采樣濾波電路——濾除干擾信號:

image

image

2.3 GPIO相關寄存器

A組為例:

image

外部中斷:

image

3. 硬件介紹

image

image

image

4. 軟件設計

(1)初始化LED控制IO口(使能對應IO外設時鍾、配置IO為普通IO功能和輸出模式、上拉設置等)

(2)LED控制程序

4.1 leds.c

/*
 * leds.c
 *
 *  Created on: 2020年4月6日
 *      Author: lenovo
 */

#include "leds.h"

/*******************************************************************************
* 函 數 名         : LED_Init
* 函數功能           : LED初始化函數
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void LED_Init(void)
{
    EALLOW;//關閉寫保護
    SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;// 開啟GPIO時鍾

    //LED1端口配置
    GpioCtrlRegs.GPCMUX1.bit.GPIO68=0;//設置為通用GPIO功能
    GpioCtrlRegs.GPCDIR.bit.GPIO68=1;//設置GPIO方向為輸出
    GpioCtrlRegs.GPCPUD.bit.GPIO68=0;//使能GPIO上拉電阻

    //LED2端口配置
    GpioCtrlRegs.GPCMUX1.bit.GPIO67=0;
    GpioCtrlRegs.GPCDIR.bit.GPIO67=1;
    GpioCtrlRegs.GPCPUD.bit.GPIO67=0;

    //LED3端口配置
    GpioCtrlRegs.GPCMUX1.bit.GPIO66=0;
    GpioCtrlRegs.GPCDIR.bit.GPIO66=1;
    GpioCtrlRegs.GPCPUD.bit.GPIO66=0;

    //LED4端口配置
    GpioCtrlRegs.GPCMUX1.bit.GPIO65=0;
    GpioCtrlRegs.GPCDIR.bit.GPIO65=1;
    GpioCtrlRegs.GPCPUD.bit.GPIO65=0;

    //LED5端口配置
    GpioCtrlRegs.GPCMUX1.bit.GPIO64=0;
    GpioCtrlRegs.GPCDIR.bit.GPIO64=1;
    GpioCtrlRegs.GPCPUD.bit.GPIO64=0;

    //LED6端口配置
    GpioCtrlRegs.GPAMUX1.bit.GPIO10=0;
    GpioCtrlRegs.GPADIR.bit.GPIO10=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO10=0;

    //LED7端口配置
    GpioCtrlRegs.GPAMUX1.bit.GPIO11=0;
    GpioCtrlRegs.GPADIR.bit.GPIO11=1;
    GpioCtrlRegs.GPAPUD.bit.GPIO11=0;

    //初始輸出高電平(LED熄滅)
    GpioDataRegs.GPCSET.bit.GPIO68=1;
    GpioDataRegs.GPCSET.bit.GPIO67=1;
    GpioDataRegs.GPCSET.bit.GPIO66=1;
    GpioDataRegs.GPCSET.bit.GPIO65=1;
    GpioDataRegs.GPCSET.bit.GPIO64=1;
    GpioDataRegs.GPASET.bit.GPIO10=1;
    GpioDataRegs.GPASET.bit.GPIO11=1;

    EDIS;//開啟寫保護
}

GPCMUX1控制GPIO64~79

image

4.2 leds.h

/*
 * leds.h
 *
 *  Created on: 2020年4月6日
 *      Author: lenovo
 */

#ifndef LEDS_H_
#define LEDS_H_

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File

#define LED1_OFF        (GpioDataRegs.GPCSET.bit.GPIO68=1)
#define LED1_ON            (GpioDataRegs.GPCCLEAR.bit.GPIO68=1)
#define LED1_TOGGLE        (GpioDataRegs.GPCTOGGLE.bit.GPIO68=1)

#define LED2_OFF        (GpioDataRegs.GPCSET.bit.GPIO67=1)
#define LED2_ON            (GpioDataRegs.GPCCLEAR.bit.GPIO67=1)
#define LED2_TOGGLE        (GpioDataRegs.GPCTOGGLE.bit.GPIO67=1)

#define LED3_OFF        (GpioDataRegs.GPCSET.bit.GPIO66=1)
#define LED3_ON            (GpioDataRegs.GPCCLEAR.bit.GPIO66=1)
#define LED3_TOGGLE        (GpioDataRegs.GPCTOGGLE.bit.GPIO66=1)

#define LED4_OFF        (GpioDataRegs.GPCSET.bit.GPIO65=1)
#define LED4_ON            (GpioDataRegs.GPCCLEAR.bit.GPIO65=1)
#define LED4_TOGGLE        (GpioDataRegs.GPCTOGGLE.bit.GPIO65=1)

#define LED5_OFF        (GpioDataRegs.GPCSET.bit.GPIO64=1)
#define LED5_ON            (GpioDataRegs.GPCCLEAR.bit.GPIO64=1)
#define LED5_TOGGLE        (GpioDataRegs.GPCTOGGLE.bit.GPIO64=1)

#define LED6_OFF        (GpioDataRegs.GPASET.bit.GPIO10=1)
#define LED6_ON            (GpioDataRegs.GPACLEAR.bit.GPIO10=1)
#define LED6_TOGGLE        (GpioDataRegs.GPATOGGLE.bit.GPIO10=1)

#define LED7_OFF        (GpioDataRegs.GPASET.bit.GPIO11=1)
#define LED7_ON            (GpioDataRegs.GPACLEAR.bit.GPIO11=1)
#define LED7_TOGGLE        (GpioDataRegs.GPATOGGLE.bit.GPIO11=1)

void LED_Init(void);

#endif /* LEDS_H_ */

利用宏定義便於電平切換。

4.3 main.c

/*
 * main.c
 *
 *  Created on: 2020年4月6日
 *      Author: lenovo
 */


#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File
#include "leds.h"

/*******************************************************************************
* 函 數 名         : delay
* 函數功能           : 延時函數,通過循環占用CPU,達到延時功能
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void delay(void)
{
    Uint16         i;
    Uint32      j;
    for(i=0;i<32;i++)
        for (j = 0; j < 50000; j++);
}

/*******************************************************************************
* 函 數 名         : main
* 函數功能           : 主函數
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void main()
{
    InitSysCtrl();

    LED_Init();

    while(1)
    {
        LED5_OFF;LED1_ON;delay();
        LED1_OFF;LED2_ON;delay();
        LED2_OFF;LED3_ON;delay();
        LED3_OFF;LED4_ON;delay();
        LED4_OFF;LED5_ON;delay();
    }

}

4.4 效果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM