• DSP CCS 12.00 芯片:TMS320F28335 建立工程 ,使LED 灯闪烁


    1.建立工程

     


    2.连接芯片,测试是否连接

     


    3.需要用到的文件展示 !


     

    4. 在工程里面新建一个文件夹,来存储数据,(.c  文件    .asm 文件)


    5.添加文件到 文件夹里面去

     


    6.在新建的文件夹里面 ,添加主函数  main.c   文件

     


    7.手动添加头文件


    8.添加的文件夹名字 

    这个资源我放在我的资源里面了!  (V101)

     

     


     9.开始的时候测试 配置是否成功!

    完整的目录:

     

    代码很少  自己打! 

    写在 main.c  里面


    10.LED 闪烁的代码:

    1. /*
    2. * main.c
    3. *
    4. * Created on: 2022年9月14日
    5. * Author: she001
    6. */
    7. //###########################################################################
    8. //
    9. // FILE: Example1_2833xGpioLED.c
    10. //
    11. // TITLE: 用DSP点亮发光二极管实验
    12. //
    13. //
    14. // 根据在RAM中调试的需要,这个项目配置成"boot to SARAM".2833x引导模式
    15. // 表如下显示. 常用的还有"boot to Flash"模式,当程序在RAM调试完善后就
    16. // 可以将代码烧进Flash中并使用"boot to Flash"引导模式.
    17. //
    18. // $Boot_Table:
    19. //
    20. // GPIO87 GPIO86 GPIO85 GPIO84
    21. // XA15 XA14 XA13 XA12
    22. // PU PU PU PU
    23. // ==========================================
    24. // 1 1 1 1 Jump to Flash
    25. // 1 1 1 0 SCI-A boot
    26. // 1 1 0 1 SPI-A boot
    27. // 1 1 0 0 I2C-A boot
    28. // 1 0 1 1 eCAN-A boot
    29. // 1 0 1 0 McBSP-A boot
    30. // 1 0 0 1 Jump to XINTF x16
    31. // 1 0 0 0 Jump to XINTF x32
    32. // 0 1 1 1 Jump to OTP
    33. // 0 1 1 0 Parallel GPIO I/O boot
    34. // 0 1 0 1 Parallel XINTF boot
    35. // 0 1 0 0 Jump to SARAM <- "boot to SARAM"
    36. // 0 0 1 1 Branch to check boot mode
    37. // 0 0 1 0 Boot to flash, bypass ADC cal
    38. // 0 0 0 1 Boot to SARAM, bypass ADC cal
    39. // 0 0 0 0 Boot to SCI-A, bypass ADC cal
    40. // Boot_Table_End$
    41. //
    42. // 功能描述:
    43. //
    44. // 程序编译下载成功后,运行程序时LED灯组会一直闪烁
    45. //
    46. //
    47. //###########################################################################
    48. // 释放日期: 2016.8.2
    49. //###########################################################################
    50. #include "DSP2833x_Device.h" // DSP2833x 头文件
    51. #include "DSP2833x_Examples.h" // DSP2833x 例子相关头文件
    52. // 使用前,声明本文件中的相关函数;
    53. void delay_loop(void);
    54. void Gpio_select(void);
    55. void main(void)
    56. {
    57. // 步骤 1. 初始化系统控制:
    58. // 设置PLL, WatchDog, 使能外设时钟
    59. // 下面这个函数可以从DSP2833x_SysCtrl.c文件中找到..
    60. InitSysCtrl();
    61. // 步骤 2. 初始化通用输入输出多路复用器GPIO:
    62. // 这个函数在DSP2833x_Gpio.c源文件中被定义了
    63. // 这个函数使GPIO控制类寄存器初始化到默认状态
    64. // InitGpio(); // 本例不用此子函数
    65. // 本例使用下面的GPIO配置
    66. Gpio_select();
    67. // 步骤 3. 清除所有中断初始化中断向量表:
    68. // 禁止CPU全局中断
    69. DINT;
    70. // 初始化PIE控制寄存器到他们的默认状态.
    71. // 这个默认状态就是禁止PIE中断及清除所有PIE中断标志
    72. // 这个函数放在DSP2833x_PieCtrl.c源文件里
    73. InitPieCtrl();
    74. // 禁止CPU中断和清除所有CPU中断标志
    75. IER = 0x0000;
    76. IFR = 0x0000;
    77. //初始化PIE中断向量表,并使其指向中断服务子程序(ISR)
    78. // 这些中断服务子程序被放在了DSP280x_DefaultIsr.c源文件中
    79. // 这个函数放在了DSP2833x_PieVect.c源文件里面.
    80. InitPieVectTable();
    81. // 步骤 4. 初始化片内外设:
    82. // 这个函数可以在DSP280x_CpuTimers.c源文件中找到
    83. // InitCpuTimers(); // 这个例子仅初始化了Cpu定时器
    84. // 步骤 5. 用户特定的代码
    85. for(;;)
    86. {
    87. GpioDataRegs.GPATOGGLE.bit.GPIO6= 1;// GPIO06翻转
    88. delay_loop();
    89. GpioDataRegs.GPATOGGLE.bit.GPIO6= 1;// GPIO06翻转
    90. delay_loop();
    91. GpioDataRegs.GPATOGGLE.bit.GPIO7= 1;// GPIO07翻转
    92. delay_loop();
    93. GpioDataRegs.GPATOGGLE.bit.GPIO7= 1;// GPIO07翻转
    94. delay_loop();
    95. }
    96. }
    97. //延迟子函数
    98. void delay_loop()
    99. {
    100. Uint32 i;
    101. Uint32 j;
    102. for(i=0;i<32;i++)
    103. for (j = 0; j < 100000; j++) {}
    104. }
    105. //GPIO初始化函数
    106. void Gpio_select(void)
    107. {
    108. EALLOW;
    109. GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 00; // GPIO6为GPIO功能
    110. GpioCtrlRegs.GPADIR.bit.GPIO6 = 1; // GPIO6为输出功能
    111. GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 00; // GPIO7为GPIO功能
    112. GpioCtrlRegs.GPADIR.bit.GPIO7 = 1; // GPIO7为输出功能
    113. EDIS;
    114. GpioDataRegs.GPATOGGLE.bit.GPIO6= 1;// GPIO06翻转 开始的时候为1 led 灯关闭
    115. GpioDataRegs.GPATOGGLE.bit.GPIO7= 1;// GPIO07翻转 开始的时候为1 led 灯关闭
    116. }
    117. //===========================================================================
    118. // No more.
    119. //===========================================================================

    11.课程知识

    1.首先所有的引脚 ,都可以借鉴别人写的文件,直接使用

    2.课程知识!

    GPIO
    通用目的I/O模块(GPIO模块)内部配有复杂逻辑多路开关控制电路和复用寄存器,将数字I/O(GPIO)引脚、片上所有外设输入输出引脚、外部接口(XINTF)地址总线、数据总线、控制总线引脚在器件封装引脚上实现复用。

    共88个GPIO,通过寄存器GPIOxMUX(x=A,B,C)进行设置。

    GPIO分为3组,A端口对应引脚GPIO0~GPIO31(32位),

    B端口对应引脚GPIO32~GPIO63(32位),

    C端口对应引脚GPIO64~GPIO74(24位)。

    当被配置为数字输入引脚时,具有输入滤波功能,通过GPIOSEL资格寄存器设定采样窗口宽度,对输入电平的干扰脉冲进行滤波。外部中断输入引脚XINT1~XINT7、不可屏蔽中断输入引脚XNMI是可编程的GPIO复用引脚。

    1. void LED_Init(void)
    2. {
    3. EALLOW;//关闭写保护
    4. SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1; // 开启GPIO时钟
    5. //LED1端口配置
    6. GpioCtrlRegs.GPCMUX1.bit.GPIO68=0;//设置为通用GPIO功能 0-通用输出 1-外设1输出 2-外设2输出 3-外设3输出
    7. GpioCtrlRegs.GPCDIR.bit.GPIO68=1;//设置GPIO方向为输出 1-输出 0-输入
    8. GpioCtrlRegs.GPCPUD.bit.GPIO68=0;//使能GPIO上拉电阻 0-使能上拉 1-禁止上拉
    9. GpioDataRegs.GPCSET.bit.GPIO68=1;//设置GPIO输出高电平
    10. //GpioDataRegs.GPCCLEAR.bit.GPIO68 = 1; //设置GPIO输出为低电平
    11. EDIS;//开启写保护
    12. }

    F28335有三种32位的I/O口,依次

    1     PORTA(GPIO0-GPIO31), 

    2      PORTB(GPIO32-GPIO63),

    3     PORTC(GPIO64-GPIO87)

    这些口都可以配置为普通的数字IO口同样也能被配置为外部接口。
    这样涉及到了IO的寄存器,IO口共有三类寄存器:
    控制寄存器、数据寄存器和中断控制寄存器。
    1、 GPIO可以配置为数字I/O或外设I/O口,GPxMUX1(2):‘0’为数字I/O,‘1’为外设I/O口;
    2: GPIO可以配置为内部电阻上拉功能,GPxPUD:‘0’为上拉,‘1’为禁止上拉
    3: GPIO具有数字滤波功能,GPxQSEL1(2):量化输入寄存器,可以确定是3周期采样
    还是6周期采样或者不用采样;
    GPIO可以配置为内部电阻上拉功能,GPxPUD:‘0’为上拉,‘1’为禁止上拉,

    4、 输入输出可配置,GPxDIR是控制每个引脚的输入或是输出,‘0’是输入,‘1’是输出;
    当GPIO配置为数字I/O时注意:
    1)28335引脚作为输出时,虽然可以通过设置GPADAT或GPBDAT改变输出端口的高低电平,但是单独写某一位时可能会使其它引脚产生误操作。为了避免这种现象的产生,改变输出引脚的高低电平时,应该使用

    GPIOxSET(置位)

    例子:  GpioDataRegs.GPCSET.bit.GPIO68=1;//设置GPIO输出高电平

    GPIOxCLEAR(清零)

    例子: GpioDataRegs.GPCCLEAR.bit.GPIO68 = 1; //设置GPIO输出为低电平

    ,GPIOxTOGGLE(反向,可以代替去翻操作)

    例子:GpioDataRegs.GPATOGGLE.bit.GPIO6= 1;// GPIO06翻转

    寄存器载入输出锁存寄存,GPIOxDIR配置方向,1为输出,0为输入.

     例子:GpioCtrlRegs.GPADIR.bit.GPIO6 = 1;      // GPIO6为输出功能


    2)当使用GPADAT的时候,一般是在初始化中,在函数中使用需要添加延时,否则可能达不到预定的输出状态。使用GPIOxSET(置位),GPIOxCLEAR(清零),GPIOxTOGGLE(反向)电平会立即变化,无需添加延时。
    GPIOxSET, GPIOxCLEAR, GPIOxTOGGLE仅仅等于1时才有效,等于0无效
     

  • 相关阅读:
    双端队列(Deque)
    React Hooks学习笔记
    2023长春大学计算机考研信息汇总
    01.OpenWrt-写在前面
    【无标题】
    用huggingface.transformers在文本分类任务(单任务和多任务场景下)上微调预训练模型
    【Kotlin】从Java开发视角出发了解Kotlin
    郑州大学编译原理实验三算符优先分析算法JAVA
    从简单到复杂,MVI 架构定义与封装使用总结
    RK3568平台 sys虚拟文件系统添加节点
  • 原文地址:https://blog.csdn.net/she666666/article/details/126844222