完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
下面的碼就是結合了adc 和scki的, 但sci就是不能傳輸出去, 懇求指點
#include "DSP281x_Device.h" #include "DSP281x_Examples.h" // 函数原型声明. void Gpio_select(void); void InitSystem(void); interrupt void adc_isr(void); // ADC结果读取中断服务程序 void SCI_Init(void); // 全局变量: int Voltage_A0; int Voltage_B0; int ADresult_num = 0; int ADC_buffer1[1024]={0}; int ADC_buffer2[1024]={0}; long abc[2]; int count=1; long message[2]; unsigned long i; void main(void) { message[0]=0x1122; message[1]=0x3344; InitSystem(); // 初始化DSP内核寄存器 Gpio_select(); // 配置GPIO复用寄存器 InitPieCtrl(); // 调用外设中断扩展初始化单元 PIE-unit ( 代码 : DSP281x_PieCtrl.c) InitPieVectTable(); // 初始化 PIE vector向量表 ( 代码 : DSP281x_PieVect.c ) InitAdc(); // Function call for basic ADC initialisation // 重新映射 PIE - Timer 1的比较中断 EALLOW; // 解除寄存器保护 PieVectTable.ADCINT = &adc_isr; EDIS; // 使能寄存器保护 // 使能ADC中断: PIE-Group1 , interrupt 6 PieCtrlRegs.PIEIER1.bit.INTx6 = 1; // 使能 CPU INT1 (连接到CPU-Timer 0中断) IER = 1; // 全局中断使能和更高优先级的实时调试事件 EINT; // 全局中断使能INTM ERTM; // 使能实时调试中断DBGM // 配置 ADC AdcRegs.ADCTRL1.bit.SEQ_CASC = 0; // 双排序器模式 AdcRegs.ADCTRL1.bit.CONT_RUN = 0; // 非连续运行 AdcRegs.ADCTRL1.bit.CPS = 0; // 预定标系数 = 1 AdcRegs.ADCMAXCONV.all = 0x0001; // SEQ1中设置2个转换 AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // 设置ADCINA0作为第一个SEQ1变换// 假定在系统初始化中EVA的时钟已经被使能 AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x8; // 设置ADCINB0作为第二个SEQ1变换.//由T1/T2逻辑驱动 T1PWM / T2PWM AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1 = 1; // 使能EVASOC启动SEQ1 // GP Timer 1 比较的输出的有效 AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // 使能SEQ1中断(每次 EOEvaRegs.GPTCONA.bit.T1PIN = 1); AdcRegs.ADCTRL3.bit.ADCCLKPS = 2; // HSPCLK进行4分频 // 配置事件管理器 EVA // Assumes EVA Clock is already enabled in InitSysCtrl(); // 禁止 T1PWM / T2PWM 输出 EvaRegs.GPTCONA.bit.TCMPOE = 0; // GP Timer 1 比较输出强制为低 EvaRegs.GPTCONA.bit.T1PIN = 0; EvaRegs.GPTCONA.bit.T1TOADC = 2; // 使能事件管理器A的EVASOC EvaRegs.T1CON.bit.FREE = 0; // 仿真器连接处理器时模块处于挂起状态 EvaRegs.T1CON.bit.SOFT = 0; // 仿真器连接处理器时模块处于挂起状态 EvaRegs.T1CON.bit.TMODE = 2; // 连续递增模式 EvaRegs.T1CON.bit.TPS = 7; // 预定标系数 = 128 EvaRegs.T1CON.bit.TENABLE = 1; // 使能 GP Timer 1 EvaRegs.T1CON.bit.TCLKS10 = 0; // 内部时钟 EvaRegs.T1CON.bit.TCLD10 = 0; // 当等于0时比较重新装载 EvaRegs.T1CON.bit.TECMPR = 0; // 禁止比较操作 EvaRegs.T1PR = 58; while(1) { for(i=0;i<1500000;i++) { EALLOW; SysCtrlRegs.WDKEY = 0xAA; EDIS; if(ADresult_num==1023) { int index,index_1; for(index=0;index<2;index++) { abc[0]=message[index]>>8; abc[1]=message[index]; for(index_1=0;index_1<2;index_1++) { SciaRegs.SCITXBUF = abc[index_1]; while(SciaRegs.SCICTL2.bit.TXRDY == 0); while (SciaRegs.SCICTL2.bit.TXEMPTY == 0); EALLOW; SysCtrlRegs.WDKEY = 0x55; SysCtrlRegs.WDKEY = 0xAA; EDIS; } } } } } } void Gpio_select(void) { EALLOW; GpioMuxRegs.GPAMUX.all = 0x0; // 所有 GPIO 端口配置为I/O GpioMuxRegs.GPBMUX.all = 0x0; GpioMuxRegs.GPDMUX.all = 0x0; GpioMuxRegs.GPFMUX.all = 0x0; GpioMuxRegs.GPFMUX.bit.SCIRXDA_GPIOF5 = 1; //配置 SCI-RX GpioMuxRegs.GPFMUX.bit.SCITXDA_GPIOF4 = 1; GpioMuxRegs.GPEMUX.all = 0x0; GpioMuxRegs.GPGMUX.all = 0x0; GpioMuxRegs.GPADIR.all = 0x0; // GPIO PORT 配置为输入 GpioMuxRegs.GPBDIR.all = 0x00; // GPIO PORT 配置为输入 GpioMuxRegs.GPDDIR.all = 0x0; // GPIO PORT 配置为输入 GpioMuxRegs.GPEDIR.all = 0x0; // GPIO PORT 配置为输入 GpioMuxRegs.GPFDIR.all = 0x0; // GPIO PORT 配置为输入 GpioMuxRegs.GPGDIR.all = 0x0; // GPIO PORT 配置为输入 GpioMuxRegs.GPAQUAL.all = 0x0; // 设置所有 GPIO 输入的量化值等于0 GpioMuxRegs.GPBQUAL.all = 0x0; GpioMuxRegs.GPDQUAL.all = 0x0; GpioMuxRegs.GPEQUAL.all = 0x0; EDIS; } void InitSystem(void) { EALLOW; SysCtrlRegs.WDCR= 0x00AF; // 配置看门狗 // 0x00E8 禁止看门狗,预定标系数Prescaler = 1 // 0x00AF 不禁止看门狗, 预定标系数Prescaler = 64 SysCtrlRegs.SCSR = 0; // 看门狗产生复位 SysCtrlRegs.PLLCR.bit.DIV = 10; // 配置处理器锁相环,倍频系数为5 SysCtrlRegs.HISPCP.all = 0x1; // 配置高速外设时钟分频系数: 2 SysCtrlRegs.LOSPCP.all = 0x2; // 配置低速外设时钟分频系数: 4 // 使用的外设时钟时钟设置: // 一般不使用的外设的时钟禁止,降低系统功耗 SysCtrlRegs.PCLKCR.bit.EVAENCLK=1; SysCtrlRegs.PCLKCR.bit.EVBENCLK=0; SysCtrlRegs.PCLKCR.bit.SCIAENCLK=1; // 使能SCI模块的时钟 SysCtrlRegs.PCLKCR.bit.SCIBENCLK=0; SysCtrlRegs.PCLKCR.bit.MCBSPENCLK=0; SysCtrlRegs.PCLKCR.bit.SPIENCLK=0; SysCtrlRegs.PCLKCR.bit.ECANENCLK=0; SysCtrlRegs.PCLKCR.bit.ADCENCLK=1; EDIS; } interrupt void adc_isr(void) { // 每次定时器中断处理看门狗 EALLOW; SysCtrlRegs.WDKEY = 0x55; EDIS; //采样结果保存 Voltage_A0 = AdcRegs.ADCRESULT0>>4; Voltage_B0 = AdcRegs.ADCRESULT1>>4; if(ADresult_num<1024) { ADresult_num++; ADC_buffer1[ADresult_num] = Voltage_A0; ADC_buffer2[ADresult_num] = Voltage_B0; } else { int z; for(z=0;z<10000;z++) { DELAY_US(1000); EALLOW; SysCtrlRegs.WDKEY = 0x55; SysCtrlRegs.WDKEY = 0xAA; EDIS; } count++; ADresult_num = 0; } // 为下一个ADC排序重新初始化 AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // 复位 SEQ1 AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // 清除 INT SEQ1 位 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // 中断响应位置位 } void SCI_Init(void) { SciaRegs.SCICCR.all =0x0007; // 1bit 停止位 无循环模式 // 无极性, 字符长度:8 bits, // 异步模式, 空闲线协议 SciaRegs.SCICTL1.all =0x0003; // 使能 TX, RX, 内部 SCICLK, // 禁止 RX ERR, SLEEP, TXWAKE SciaRegs.SCIHBAUD = 487 >> 8 ; // 波特率:9600(LSPCLK = 37.5MHz) ; SciaRegs.SCILBAUD = 487 & 0x00FF; SciaRegs.SCICTL1.all =0x0023; // 使SCI退出复位 } |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
stm32f407+ksz8863rlli概率性ping不通
783 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-常见网络服务搭建之NFS服务搭建
393 浏览 0 评论
求助:辉芒微芯片 FDM B11GBMH 的信息及开发环境安装
426 浏览 0 评论
936 浏览 0 评论
嵌入式 学习-飞凌嵌入式ElfBoard ELF 1板卡-shell脚本编写之输入输出重定向
785 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11313 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-29 11:30 , Processed in 0.509400 second(s), Total 70, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号