SCI中断方式
来源:互联网 发布:淘宝网店铺转让协议 编辑:程序博客网 时间:2024/06/05 18:45
- //===========================================================================
- //
- // 文件名称: SCI_interrupt.c
- //
- // 功能描述: DSP28 SCI - 同计算机通信,采用超级中断接受数据
- // 间隔2秒DSP向计算机发送字符"2812-UART is fine !"
- // SCI配置 : 波特率 9600 ,数据长度 8 Bit , 无极性 , 1位停止位
- // TX缓冲空触发SCI-TX INT 中断
- // CPU CORE 定时器0中断出发第一次传输
- //===========================================================================
- #include "DSP281x_Device.h"
- // 使用的函数原型声明
- void Gpio_select(void);
- void InitSystem(void);
- void SCI_Init(void);
- interrupt void cpu_timer0_isr(void);
- interrupt void SCI_TX_isr(void);
- // 全局变量
- char message[]={"The F2812-UART is fine !/n/r"};
- int index =0; // 字符串指针
- void main(void)
- {
- InitSystem(); // 初始化DSP内核寄存器
- Gpio_select(); // 配置GPIO复用功能寄存器
- InitPieCtrl(); // 调用外设中断扩展初始化单元 PIE-unit ( 代码 : DSP281x_PieCtrl.c)
- InitPieVectTable(); // 初始化 PIE vector向量表 ( 代码 : DSP281x_PieVect.c )
- // 重新映射 PIE - Timer 0的中断
- EALLOW; // 解除寄存器保护
- PieVectTable.TINT0 = &cpu_timer0_isr;
- EDIS; // 使能寄存器保护
- InitCpuTimers();
- // 配置 CPU-Timer 0 周期50 ms:
- // 150MHz CPU 频率, 50000 微妙中断周期
- ConfigCpuTimer(&CpuTimer0, 150, 50000);
- // 使能PIE内的 TINT0 : Group 1 interrupt 7
- PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
- // 使能 CPU INT1 (连接到CPU-Timer 0中断)
- IER = 1;
- EALLOW; // 解除寄存器保护
- PieVectTable.TXAINT = &SCI_TX_isr;
- EDIS; // 使能寄存器保护
- // 使能PIE内的 SCI_A_TX_INT中断
- PieCtrlRegs.PIEIER9.bit.INTx2 = 1;
- // 使能 CPU INT 9
- IER |= 0x100;
- // 全局中断使能和更高优先级的实时调试事件
- EINT; // 全局中断使能INTM
- ERTM; // 使能实时调试中断DBGM
- CpuTimer0Regs.TCR.bit.TSS = 0; // 启动定时器0
- SCI_Init();
- while(1)
- {
- while(CpuTimer0.InterruptCount < 40) // 等待50ms * 40
- {
- EALLOW;
- SysCtrlRegs.WDKEY = 0xAA; // 看门狗控制
- EDIS;
- }
- CpuTimer0.InterruptCount = 0; // 复位计数器
- index = 0;
- SciaRegs.SCITXBUF= message[index++];
- }
- }
- 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; //配置 SCI-TX
- GpioMuxRegs.GPEMUX.all = 0x0;
- GpioMuxRegs.GPGMUX.all = 0x0;
- GpioMuxRegs.GPADIR.all = 0x0; // GPIO PORT 配置为输入
- GpioMuxRegs.GPBDIR.all = 0x00FF; // GPIO Port B15-B8 配置为输入 , B7-B0 配置为输出
- 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=0;
- 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=0;
- EDIS;
- }
- 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.SCICTL2.bit.TXINTENA = 1; // 使能SCI发送中断
- SciaRegs.SCICTL1.all =0x0023; // 使SCI退出复位
- }
- interrupt void cpu_timer0_isr(void)
- {
- CpuTimer0.InterruptCount++;
- // 每个定时器中断清除一次看门狗计数器
- EALLOW;
- SysCtrlRegs.WDKEY = 0x55; // 看门狗控制
- EDIS;
- // 响应中断并允许系统接收更多的中断
- PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
- }
- //===========================================================================
- // SCI_A 发送中断服务程序
- // 发送字符串 message[]
- //===========================================================================
- interrupt void SCI_TX_isr(void)
- {
- if (index < 26) SciaRegs.SCITXBUF=message[index++];
- // 重新初始化PIE为下一次 SCI-A TX准备接收下一次中断
- PieCtrlRegs.PIEACK.all = 0x0100; //响应中断
- }
- //===========================================================================
- // 代码结束.
- //===========================================================================
- SCI中断方式
- SCI查询方式
- 中断方式
- SCI
- SCI
- SCI
- SCI
- SCI
- 飞思卡尔单片机DZ60---SCI(中断发送)
- 飞思卡尔单片机DZ60---SCI(中断接收)
- 关于SMI、MSI、SCI、INTx各种中断小结
- 关于SMI、MSI、SCI、INTx各种中断小结
- STM32 -USART中断方式
- S3C2440IIC中断方式
- STM32 -USART中断方式
- S3C2440 UART中断方式
- STC12C5A60S2 ADC中断方式
- CPU中断方式
- 基于MATLAB的FFT仿真
- python之os.walk(’path’)
- android linker 浅析
- FFT结果的物理意义
- order by 语句对null字段的默认排序
- SCI中断方式
- 获取打开文件的PID
- c语言陷阱与缺陷
- 经典算法解析
- 04高级查询
- Linux移植2TQ2440----follow step by step
- 明白了这十个故事,你也就参悟了人生
- 平滑滤波器的演化
- 程序人生成长发展中的一些感悟