This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
您好!
我已经通过从示例代码中更改引脚尝试了 UART 通信代码、Tx 线 看起来根本不会传输。当我编辑 controlSUITE 代码时、SCI 模块无法通过 Launchpad 上的引脚输出任何内容时、我遇到了一些问题 它的工作很好。我在下面发布了我的代码、如果对我缺少的内容有任何建议、我将不胜感激。
//########################################################################################################################
//
//文件: sci_ex3_echoback.c
//
//标题: SCI 回送示例。
//
//! \addtogroup driver_example_list
//!
提前感谢。
您好!
感谢您发布代码。 代码看起来正常。 下面是一些问题
[引用 user="Rani Loganthan"]当我编辑 controlSUITE 代码时、SCI 模块无法通过 Launchpad 上的引脚输出任何内容时、我遇到了一些问题、其工作正常[/quot]
运行此代码时、您在 J1 Booster Pack 连接器上连接了什么?
2、SCI 在另一侧连接到什么?
3.您在另一边看到一些字符吗?
4.由于您说过 controlSUITE 代码工作正常、它是否处于相同的设置中。
此致、
Sudharsanan
通过推荐论坛了解... 在预定义符号中添加了_LAUNCHXL_F28379D ... 现在正在传输... 但是,当我添加计时器中断和 SCI TX 中断时,它们都无法正常工作... 如果我禁用了任何一个剩余的中断功能、则其中一个可以正常工作... 关于我犯错之处的任何想法...
您好!
值得注意的是、您已经超越了这一步。 我不明白你的意思
[引用 USER="Rani Loganthan ]但当我添加计时器中断和 SCI TX 中断时,两者都无法正常工作... 如果我禁用其余的任何一个中断功能、则可以正常工作
您可以参考中断示例:[C2000Ware 安装目录]\driverlib\f2837xd\examples\cpu1\interrupt_ex2_with_i2c_sci_spi_loopback.c.这是一个处理多个中断的示例。 如果您仍然遇到问题、请发布相关代码片段、并详细介绍您禁用的内容/操作方法。
此致、
Sudharsanan
sudharsanan、您好!
我的应用使用带有 SCIB 发送中断的定时器0和 timer2。 当我不启用时、SCIB 中断 计时器0和计时器2都工作正常。 使能 SCIB 中断定时器2中断不起作用。
我在这里附上了供您参考的片段。如果我犯了任何错误、请通知我。
提前感谢。
//########################################################################################################################
//
//文件:timer_ex1_cputimers.c
//
//标题:CPU 定时器示例
//
//! \addtogroup driver_example_list
//!
//
//包含的文件
//
#include "driverlib.h"
#include "device.h"
#include "sci_B.h"
#include "Timer0.h"
//
//主函
//
void main (void)
{
//
//初始化设备时钟和外设
//
device_init();
//
//将 GPIO 引脚配置为推挽输出
//
DEVICE_initGPIO();
GPIO_setPinConfig (DEVICE_GPIO_CFG_LED1);
GPIO_setMasterCore (DEVICE_GPIO_PIN_LED1、GPIO_CORE_CPU1);
GPIO_setPadConfig (DEVICE_GPIO_PIN_LED1、GPIO_PIN_TYPE_STD);
GPIO_setDirectionMode (DEVICE_GPIO_PIN_LED1、GPIO_DIR_MODE_OUT);
SCI_Communication_CONF ();
RS485enable();
ModbusMaster_begin (1、19200);
eCAP_PinConf ();
//
//初始化 PIE 并清除 PIE 寄存器。 禁用 CPU 中断。
//
interrupt_initModule();
//
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//
interrupt_initVectorTable();
//
//每个 CPU 定时器中断的 ISR
//
INTERRUPT_REGTER (INT_TIMER0、&cpuTimer0ISR);
interrupt_register (INT_TIMER2、&cpuTimer2ISR);
interrupt_register (INT_SCIB_TX、&sciaTXFIFOISR);
INTERRUPT_REGISTER (INT_ECAP1、&ecap1ISR);
//
//初始化设备外设。 对于本示例、仅初始化
// CPU 定时器。
//
initCPUTimer();
SCI_Communication_Int();
initECAP();
//
//将 CPU 定时器0、1和2配置为每秒中断一次:
// 1秒周期(以 μ 秒为单位)
//
configCPUTimer (CPUTIMER 0_BASE、DEVICE_SYSCLK_FREQ、1000000);
configCPUTimer (CPUTIMER 2_base、DEVICE_SYSCLK_FREQ、1000000);
//
//为了确保精确的时序,请使用只写指令来写入
//整个寄存器。 因此、如果任何配置位发生更改
//在 configCPUTimer 和 initCPUTimers 中,还必须进行以下设置
//更新。
//
CPUTimer_enableInterrupt (CPUTIMER0_BASE);
CPUTimer_enableInterrupt (CPUTIMEer2_base);
//启用连接到 CPU 定时器0的 CPU INT1、INT13和 INT14,
//分别为 CPU 定时器1和 CPU 定时器2。
//在 PIE 中启用 TINT0:组1中断7
//
INTERRUPT_ENABLE (INT_TIMER0);
INTERRUPT_ENABLE (INT_TIMER2);
INTERRUPT_ENABLE (INT_SCIB_TX);
INTERRUPT_ENABLE (INT_ECAP1);
//
//启动 CPU 定时器0、CPU 定时器1和 CPU 定时器2。
//
CPUTimer_startTimer (CPUTIMER0_BASE);
CPUTimer_startTimer (CPUTIMEer2_base);
//
//启用全局中断(INTM)和实时中断(DBGM)
//
EINT;
ERTM;
//空闲循环。 只需坐下来循环(可选)
//
while (1)
{
NOP;
}
}
#include "driverlib.h"
#include "device.h"
#include "Timer0.h"
#include"RpmCal.h"
#include "ecap_3.h"
volatile uint16_t Start_Delay、Reset_Delay=0、cpuTimer0IntCount = 0、cpuTimer1IntCount、Pulse;
//
// initCPUTimers -此函数初始化所有三个 CPU 计时器
//到已知状态。
//
//
// configCPUTimer -此函数将所选的计时器初始化为
//由"freq"和"period"参数指定的周期。 "freq"是
//输入为 Hz,周期以 uSeconds 为单位。 定时器保持在已停止状态
//配置后的状态。
//
空 initCPUTimers (空)
{
//
//将定时器周期初始化为最大值
//
CPUTimer_setPeriod (CPUTIME0_BASE、0xFFFFFFFF);
CPUTimer_setPeriod (CPUTIMEer2_base、0xFFFFFFFF);
//
//初始化预分频计数器以进行1分频(SYSCLKOUT)
//
CPUTimer_setPrescaler (CPUTIMER 0_BASE、0);
CPUTimer_setPreScaler (CPUTIMER 2_base、0);
//
//确保计时器停止
//
CPUTimer_stopTimer (CPUTIME0_BASE);
CPUTimer_stopTimer (CPUTIMEer2_base);
//
//使用句点值重新加载所有计数器寄存器
//
CPUTimer_reloadTimerCounter (CPUTIMEER0_BASE);
CPUTimer_reloadTimerCounter (CPUTIMEer2_base);
}
void configCPUTimer (uint32_t cpuTimer、float freq、float period)
{
uint32_t temp;
//
//初始化计时器周期:
//
temp =(uint32_t)(freq /1000000 * period);
CPUTimer_setPeriod (cpuTimer、temp);
//
//将预分频计数器设置为1分频(SYSCLKOUT):
//
CPUTimer_setPreScaler (cpuTimer、0);
//
//初始化计时器控制寄存器。 计时器停止、重新加载、
//自由运行被禁用,中断被启用。
//此外,自由位和软位被置位
//
CPUTimer_stopTimer (cpuTimer);
CPUTimer_reloadTimerCounter (cpuTimer);
CPUTimer_setEmulationMode (cpuTimer、
CPUTIME_EMULATIONMODE_STOPAFTERNEXTDECREMENT);
CPUTimer_enableInterrupt (cpuTimer);
//
//重置三个 cpuTimer 的中断计数器
//
IF (cpuTimer =CPUTIME0_BASE)
{
START_DELAY=RESET_DELAY=0;
}
否则、如果(cpuTimer = CPUTIMEer2_base)
{
PULSE_Sec = 0;
}
}
//
// cpuTimer0ISR - CpuTimer0的计数器
//
_interrupt void cpuTimer0ISR (void)
{
START_DELAY_+;
RESET_DELAY_++;
//
//确认此中断以从组1接收更多中断
//
INTERRUPT_clearACKGROUP (INTERRUPT_ACK_Group1);
}
//
// cpuTimer1ISR - CpuTimer1的计数器
//
uint16_t timer2;
_interrupt void cpuTimer2ISR (void)
{
PULSE_Sec++;
timer2++;
}
您好!
感谢您提供代码和屏幕截图。
您能告诉我这两种情况下的 IER 和 IFR 寄存器内容吗?
此致、
Sudharsanan
情况1:SCI 中断正在工作 IER= 0x2009、IFR=0x2100或0x 2101。 定时器2中断不起作用...
情况2:SCI 中断被禁用 IER=0x2009,IFR=0x0000。 但计时器中断正常工作。
同时使能除定时器2中断外、每个中断都正常工作。
您好!
很抱歉耽误您的回答。 SCI B 中断在系统中发生的频率。 是否存在 SCIB 中断始终处于优先级并导致完全不处理计时器2的可能性? 它具有比 INT14更高的优先级 INT9。
此致、
Sudharsanan
是的、您回答正确... 当我使用轮询方法传输数据时、一切都可以正常工作...
谢谢。