文章目录

  • F28335 的外设中断源
  • PIE 级中断表。。。。。非常有用
  • 每一组 ePWM 模块
  • GPIO输出配置LED
  • GPIO输入配置KEY
  • 外设中断PIE配置
  • 定时器0配置,1与2类比即可
  • EPWM配置,外加PIE中断
  • ADC单路配置
F28335 的外设中断源

远远不止 12 个,共用 58 个。那么如何将这 58 个外设中断源分配给这 12 个中断线呢,
这就需要 F28335 的 PIE 外设中断扩展模块来完成。

PIE 级中断表。。。。。非常有用

每一组 ePWM 模块

GPIO输出配置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;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;
}
GPIO输入配置KEY
void KEY_Init(void)
{EALLOW;SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;// 开启GPIO时钟//KEY端口配置GpioCtrlRegs.GPAMUX1.bit.GPIO12=0;GpioCtrlRegs.GPADIR.bit.GPIO12=0;GpioCtrlRegs.GPAPUD.bit.GPIO12=0;GpioCtrlRegs.GPAMUX1.bit.GPIO13=0;GpioCtrlRegs.GPADIR.bit.GPIO13=0;GpioCtrlRegs.GPAPUD.bit.GPIO13=0;GpioCtrlRegs.GPAMUX1.bit.GPIO14=0;GpioCtrlRegs.GPADIR.bit.GPIO14=0;GpioCtrlRegs.GPAPUD.bit.GPIO14=0;GpioCtrlRegs.GPBMUX2.bit.GPIO48=0;GpioCtrlRegs.GPBDIR.bit.GPIO48=1;GpioCtrlRegs.GPBPUD.bit.GPIO48=0;GpioCtrlRegs.GPBMUX2.bit.GPIO49=0;GpioCtrlRegs.GPBDIR.bit.GPIO49=1;GpioCtrlRegs.GPBPUD.bit.GPIO49=0;GpioCtrlRegs.GPBMUX2.bit.GPIO50=0;GpioCtrlRegs.GPBDIR.bit.GPIO50=1;GpioCtrlRegs.GPBPUD.bit.GPIO50=0;EDIS;GpioDataRegs.GPBSET.bit.GPIO48=1;GpioDataRegs.GPBSET.bit.GPIO49=1;GpioDataRegs.GPBSET.bit.GPIO50=1;
}char KEY_Scan(char mode)
{static char keyl1=1;static char keyl2=1;static char keyl3=1;//第1列扫描KEY_L1_SetL;KEY_L2_SetH;KEY_L3_SetH;if(keyl1==1&&(KEY_H1==0||KEY_H2==0||KEY_H3==0)){DELAY_US(10000);keyl1=0;if(KEY_H1==0){return KEY1_PRESS;}else if(KEY_H2==0){return KEY4_PRESS;}else if(KEY_H3==0){return KEY7_PRESS;}}else if(KEY_H1==1&&KEY_H2==1&&KEY_H3==1){keyl1=1;}if(mode)keyl1=1;//第2列扫描KEY_L2_SetL;KEY_L1_SetH;KEY_L3_SetH;if(keyl2==1&&(KEY_H1==0||KEY_H2==0||KEY_H3==0)){DELAY_US(10000);keyl2=0;if(KEY_H1==0){return KEY2_PRESS;}else if(KEY_H2==0){return KEY5_PRESS;}else if(KEY_H3==0){return KEY8_PRESS;}}else if(KEY_H1==1&&KEY_H2==1&&KEY_H3==1){keyl2=1;}if(mode)keyl2=1;//第3列扫描KEY_L3_SetL;KEY_L1_SetH;KEY_L2_SetH;if(keyl3==1&&(KEY_H1==0||KEY_H2==0||KEY_H3==0)){DELAY_US(10000);keyl3=0;if(KEY_H1==0){return KEY3_PRESS;}else if(KEY_H2==0){return KEY6_PRESS;}else if(KEY_H3==0){return KEY9_PRESS;}}else if(KEY_H1==1&&KEY_H2==1&&KEY_H3==1){keyl3=1;}if(mode)keyl3=1;return KEY_UNPRESS;
}
外设中断PIE配置
interrupt void EXTI1_IRQn(void);
void EXTI1_Init(void)
{EALLOW;SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;    // GPIO input clockEDIS;EALLOW;//KEY端口配置GpioCtrlRegs.GPAMUX1.bit.GPIO12=0;GpioCtrlRegs.GPADIR.bit.GPIO12=0;GpioCtrlRegs.GPAPUD.bit.GPIO12=0;GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 0;  // 外部中断1(XINT1)与系统时钟SYSCLKOUT同步GpioCtrlRegs.GPBMUX2.bit.GPIO48=0;GpioCtrlRegs.GPBDIR.bit.GPIO48=1;GpioCtrlRegs.GPBPUD.bit.GPIO48=0;GpioDataRegs.GPBCLEAR.bit.GPIO48=1;//LEDIS;EALLOW;GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 12;   // XINT1是GPIO12EDIS;EALLOW;    // 修改被保护的寄存器,修改前应添加EALLOW语句PieVectTable.XINT1 = &EXTI1_IRQn;EDIS;   // EDIS的意思是不允许修改被保护的寄存器PieCtrlRegs.PIEIER1.bit.INTx4 = 1;          // 使能PIE组1的INT4XIntruptRegs.XINT1CR.bit.POLARITY = 0;      // 下降沿触发中断XIntruptRegs.XINT1CR.bit.ENABLE= 1;        // 使能XINT1IER |= M_INT1;                        // 使能CPU中断1(INT1)EINT;                                       // 开全局中断ERTM;
}interrupt void EXTI1_IRQn(void)
{Uint32 i;for(i=0;i<10000;i++);    //键盘消抖动while(!KEY_H1);LED2_TOGGLE;PieCtrlRegs.PIEACK.bit.ACK1=1;
}
定时器0配置,1与2类比即可
interrupt void TIM0_IRQn(void);//定时器0初始化函数
//Freq:CPU时钟频率(150MHz)
//Period:定时周期值,单位us
void TIM0_Init(float Freq, float Period)
{EALLOW;SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1; // CPU Timer 0EDIS;//设置定时器0的中断入口地址为中断向量表的INT0EALLOW;PieVectTable.TINT0 = &TIM0_IRQn;EDIS;//指向定时器0的寄存器地址CpuTimer0.RegsAddr = &CpuTimer0Regs;//设置定时器0的周期寄存器值CpuTimer0Regs.PRD.all  = 0xFFFFFFFF;//设置定时器预定标计数器值为0CpuTimer0Regs.TPR.all  = 0;CpuTimer0Regs.TPRH.all = 0;//确保定时器0为停止状态CpuTimer0Regs.TCR.bit.TSS = 1;//重载使能CpuTimer0Regs.TCR.bit.TRB = 1;// Reset interrupt counters:CpuTimer0.InterruptCount = 0;ConfigCpuTimer(&CpuTimer0, Freq, Period);//开始定时器功能CpuTimer0Regs.TCR.bit.TSS=0;//开启CPU第一组中断并使能第一组中断的第7个小中断,即定时器0IER |= M_INT1;PieCtrlRegs.PIEIER1.bit.INTx7 = 1;//使能总中断EINT;ERTM;
}interrupt void TIM0_IRQn(void)
{EALLOW;LED2_TOGGLE;PieCtrlRegs.PIEACK.bit.ACK1=1;EDIS;
}
EPWM配置,外加PIE中断
interrupt void epwm1_timer_isr(void);
void EPWM1_Init(Uint16 tbprd)
{EALLOW;SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;   // Disable TBCLK within the ePWMSysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;  // ePWM1EDIS;// Interrupts that are used in this example are re-mapped to// ISR functions found within this file.EALLOW;  // This is needed to write to EALLOW protected registersPieVectTable.EPWM1_INT = &epwm1_timer_isr;EDIS;    // This is needed to disable write to EALLOW protected registersEALLOW;SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;      // Stop all the TB clocksEDIS;// Setup SyncEPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;  // Pass through// Allow each timer to be sync'edEPwm1Regs.TBCTL.bit.PHSEN = TB_ENABLE;EPwm1Regs.TBPHS.half.TBPHS = 0;EPwm1Regs.TBPRD = tbprd;EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;    // Count upEPwm1Regs.TBCTL.bit.HSPCLKDIV=TB_DIV1;EPwm1Regs.TBCTL.bit.CLKDIV=TB_DIV1;EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;     // Select INT on Zero eventEPwm1Regs.ETSEL.bit.INTEN = 1;  // Enable INTEPwm1Regs.ETPS.bit.INTPRD = ET_1ST;           // Generate INT on 1st eventEALLOW;SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;         // Start all the timers syncedEDIS;// Enable CPU INT3 which is connected to EPWM1-6 INT:IER |= M_INT3;// Enable EPWM INTn in the PIE: Group 3 interrupt 1-6PieCtrlRegs.PIEIER3.bit.INTx1 = 1;// Enable global Interrupts and higher priority real-time debug events:EINT;   // Enable Global interrupt INTMERTM;   // Enable Global realtime interrupt DBGM
}interrupt void epwm1_timer_isr(void)
{static Uint16 cnt=0;cnt++;if(cnt==5000){cnt=0;LED3_TOGGLE;}// Clear INT flag for this timerEPwm1Regs.ETCLR.bit.INT = 1;// Acknowledge this interrupt to receive more interrupts from group 3PieCtrlRegs.PIEACK.bit.ACK3 = 1;
}
ADC单路配置
void ADC_Init(void)
{// Specific clock setting for this example:EALLOW;SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;    // ADCEDIS;// Specific clock setting for this example:EALLOW;SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/(2*ADC_MODCLK)EDIS;InitAdc();  // For this example, init the ADC// Specific ADC setup for this example:AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;        // 1  Cascaded modeAdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous runAdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x0;// Start SEQ1AdcRegs.ADCTRL2.all = 0x2000;}Uint16 Read_ADCValue(void)
{while (AdcRegs.ADCST.bit.INT_SEQ1== 0);AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;return AdcRegs.ADCRESULT0>>4;
}

dsp28335杂记1相关推荐

  1. dsp28335杂记2

    文章目录 adc多通道配置 SCI-A转rs232(MAX232)收发配置 SPI收发配置 SCI-B 转 rs485(SP3485)收发配置 SPI收发配置+中断+loopback+看看就好,嘿嘿 ...

  2. [原创]商城系统下单库存管控系列杂记(二)(并发安全和性能部分延伸)

      商城系统下单库存管控系列杂记(二)(并发安全和性能部分延伸)     前言   参与过几个中小型商城系统的开发,随着时间的增长,以及对系统的深入研究和测试,发现确实有很多值得推敲和商榷的地方(总有 ...

  3. Webpack系列-第一篇基础杂记

    系列文章 Webpack系列-第一篇基础杂记 Webpack系列-第二篇插件机制杂记 Webpack系列-第三篇流程杂记 前言 公司的前端项目基本都是用Webpack来做工程化的,而Webpack虽然 ...

  4. 黯然微信小程序杂记(三):微信小程序实现倒计时功能 附讲解教学 附源码

    黯然微信小程序杂记(三):微信小程序实现倒计时功能 附超详细注释 附源码 一.功能描述 二.界面展示 三.test.wxml代码 四.test.js代码(注释很详细 很易懂) CSDN私信我,有关微信 ...

  5. 黯然微信小程序杂记(二):小程序最新版登录并进行缓存模块的实现 附源码

    黯然微信小程序杂记(二):小程序最新版登录进行缓存模块的实现 附源码 一.功能描述 二.mine.wxml界面图片 三.mine.wxml代码 四.mine.wxss代码 五.mine.js代码 六. ...

  6. 黯然微信小程序杂记(一):从服务器获取数据 后端语言php

    黯然学编程 之 微信小程序杂记(一):从服务器获取数据 后端语言php 一.功能描述 二.服务器.数据库与微信小程序逻辑的关系 服务器 数据库 与微信小程序逻辑关系 三.请求数据的代码(可当做模板用) ...

  7. SpringMVC杂记

    SpringWebflow杂记(一) 框架初探,与SpringMVC的集成 SpringMVC杂记(一) 文件上传 SpringMVC杂记(二) 使用@ResponseBody出现乱码解决方法 Spr ...

  8. webpack-插件机制杂记

    系列文章 Webpack系列-第一篇基础杂记 webpack系列-插件机制杂记 前言 webpack本身并不难,他所完成的各种复杂炫酷的功能都依赖于他的插件机制.或许我们在日常的开发需求中并不需要自己 ...

  9. Python 网络服务相关 杂记

    个人所有文章整理在此篇,将陆续更新收录:知无涯,行者之路莫言终(我的编程之路) 本文杂记了下面一些点 [1].Python的原生版Socket [2].python自带的模块:`wsgiref`的简单 ...

最新文章

  1. java 打包目录_Java打包文件目录问 zip文件
  2. python的数字比较好_说说 Python3 中的数字处理
  3. 爱创课堂每日一题第四十天- 说说你对语义化的理解?
  4. 风雨网规路:跌倒了,是件坏事吗?
  5. vue定义global.js,挂载在vue原型上面使用
  6. 解决使用sudo没问题,但是使用su会报错 su: Authentication failure 的问题
  7. 学习PHP-感谢帅哥分享O(∩_∩)O~
  8. 栈的输出_C|简单实现栈、及利用递归将十进制数用其他进制来输出
  9. vue监听浏览器进入页面_vue禁止浏览器F5进行刷新和监听浏览器刷新事件
  10. android程序设计排序方法,Android编程实现对文件夹里文件排序的方法
  11. 基于FPGA的Yolov4 tiny目标检测网络加速器
  12. EXCEL的VBA宏密码破解
  13. 修复 Key is stored in legacy trusted.gpg keyring
  14. 链塔区块链数据平台周报:新增富豪榜、项目点评、收藏等功能 | 链塔数据
  15. Python 代码实现ArcGis 标注Label转注记Annotation
  16. IE无法上网,远程计算机或设备将不接受连接,其他浏览器可用
  17. unity水流效果插件Obi Fluidv4.1
  18. 使用Navicat备份指定数据库表
  19. 再见,安卓开发权威指南
  20. kali2020之chrome安装代理插件

热门文章

  1. python心率检测
  2. excel更改日期格式无效_Excel日期不会更改格式
  3. siesta在Linux运行,并行版的SIESTA不能运行
  4. 一道关于飞机加油的问题
  5. 中大 华科 计算机学院,中国进步“最快”的13所大学,国科大、中大、电子科大、华科升级...
  6. FlashFXP命令行
  7. js以excel为模板的打印
  8. Hadoop简介 4V特征和3个核心
  9. BAT批处理如何去写Windows防火墙规则
  10. PMSG直驱式永磁同步风力发电机,包含MPPT转速双PI,转矩,并网模型等等多种控制,DFIG双馈风力发电机等等。