脑委缩吃什么药能空制| 后背刺痛什么原因引起的| 黄体生成素高是什么原因| 黑色的蜜蜂是什么蜂| 连续打喷嚏是什么原因| 申五行属什么| 诺丽果有什么功效| 小蛇吃什么| 阴历六月十九是什么日子| 狡黠什么意思| 郑少秋为什么娶沈殿霞| 梦见栽花是什么意思| 男人左眼跳是什么预兆| 火花是什么生肖| 睡觉手麻木是什么原因| 前列腺钙化吃什么药| 水泻拉肚子是什么原因| 叫舅舅的是什么关系| 咳嗽可以吃什么水果| 什么是避孕套| 5月份出生的是什么星座| 医院三甲是什么意思| 什么叫三焦| 孕妇有血窦要注意什么| 总做噩梦是什么原因| 棒子面是什么| 一人吃饱全家不饿是什么生肖| 衤字旁与什么有关| 晰字五行属什么| 尿路感染喝什么药| 寒号鸟是什么动物| 胆在什么位置图片| 鼻子上长脓包型痘痘是什么原因| 儿童嗓子疼吃什么药好| 小孩呕吐是什么原因引起的| 三月29号是什么星座| 午安是什么意思| 梦见修坟墓是什么预兆| 心窦过缓是什么原因| 足字旁的字跟什么有关| 同心同德是什么意思| 小分子肽有什么作用| 松弛是什么意思| 2024年是什么命| 百香果有什么功效与作用| 胸闷挂什么科| 什么药降糖效果最好| 痔疮很痒是什么原因| 梦见买猪肉是什么预兆| 突然间头晕是什么原因| 爷们儿大结局是什么| 乳腺结节三级是什么意思| 35年属什么生肖| 九月15是什么星座| 什么人不能念阿弥陀佛| 红花代表什么生肖| 检查血压挂什么科| 黑枸杞对男性性功能有什么帮助| 脲是什么意思| 牛皮糖是什么意思| 泡面吃多了有什么危害| 袁字五行属什么| 铁锈是什么颜色的| 吃百香果有什么好处| 舌面有裂纹是什么原因| 踮脚有什么好处| 父亲节送什么礼物比较好| 1902年属什么生肖| 菩提萨婆诃是什么意思| 入职体检70元一般检查什么| 负压引流器有什么作用| 宝宝佛适合什么人戴| 包浆是什么意思| 楼梯步数有什么讲究| 如花是什么意思| 一什么牙刷| 潴留性囊肿是什么意思| 荷花指什么生肖| 杭州市市长什么级别| 讨好的笑是什么笑| 肌腱是什么组织| 摔纹皮是什么皮| 匚读什么| 猫咪打呼噜代表什么| 什么什么发光| 孕妇吃什么对胎儿好| 假借是什么意思| 丹凤眼是什么样| 什么是包容| hbeag是什么意思| 肝癌晚期什么症状| 喜欢紫色的人是什么性格| 微信加入黑名单和删除有什么区别| 白血球高是什么原因| 梦见吃葡萄是什么意思| 三道鳞是什么鱼| 鱼肉百姓什么意思| 收孕妇尿是干什么用的| 海纳百川是什么意思| 1973年是什么年| 梦到牛是什么预兆| 浑身疼吃什么药| 氧化钙是什么| 幽门螺旋杆菌的症状是什么| 7月去英国穿什么| 阴道炎不能吃什么| 益母草有什么功效| 什么最解渴| 甲亢不能吃什么| 眉目比喻什么| 巨细胞病毒阳性什么意思| 煲排骨汤放什么材料好| 埃及人是什么人种| 乳腺点状强回声是什么意思| 肺慢阻是什么情况| 按摩椅什么牌子最好| 沙蟹吃什么| 不爱说话的人是什么性格| 胸有成竹是什么意思| 生蒜头吃了有什么好处和坏处| 协会是什么意思| 男人喝劲酒有什么好处| 156是什么意思| 早期流产是什么症状| 疮疡是什么病| 干什么能挣钱快| 貔貅和麒麟有什么区别| 体检胸透主要检查什么| 二加一笔是什么字| 非食健字是什么意思| 心脏早搏有什么症状| 身份证后六位代表什么| 门槛是什么意思| 红沙日是什么意思| 限购是什么意思| 南瓜不能和什么食物一起吃| 刷牙牙龈出血是什么原因| 做空什么意思| 什么牌子的山地车好骑又不贵| 可可粉是什么东西| 社康是什么意思| 领事是什么级别| 黄芪和什么泡水壮阳| 点头之交是什么意思| 黄芪是什么味道| 出水痘能吃什么食物| 1991年是什么年| 血浆是什么颜色| 山东有什么好吃的| 六月六是什么节日| 非营利性医院是什么意思| 液氧是什么| 先天性聋哑病属于什么遗传病| 虾和什么蔬菜搭配最好| 百合什么时候开花| 三亚是什么海| 白带是什么东西| 鹅口疮用什么药| 下肢静脉曲张挂什么科| 女人阴道痒是什么原因| 五蕴皆空是什么意思| 曹操是什么生肖| 什么什么的田野| 普洱茶属于什么茶| 蜱虫用什么药可以消灭| 主动脉硬化什么意思| 公章一般是什么字体| 学霸是什么意思| rag什么意思| 什么的骏马| 心衰应该注意什么| 着凉感冒吃什么药| 电话停机是什么意思| 阴道口发白是什么原因| 胃胀气吃什么药| 利湿是什么意思| 尿细菌计数高是什么原因| 平均血红蛋白浓度偏低是什么意思| 6.15是什么星座| 女儿红属于什么酒| 举人相当于什么官| 油面是什么| 金项链断了有什么预兆| 晚上7点到9点是什么时辰| 乳头瘙痒是什么原因| 一个人自言自语的说话是什么病| 孕妇吃什么| 艾迪生病是什么病| 什么野菜| 萩是什么意思| 皮蛋不能和什么一起吃| 兔跟什么生肖配对最好| 朋友梦到我怀孕了是什么意思| 国家穷为什么不多印钱| 总胆红素偏高什么意思| 一个合一个页读什么| 今年十八岁属什么生肖| 落是什么生肖| 吃什么可以增强记忆力| 嘴唇发麻是什么原因| 铜绿是什么| 肾阴虚吃什么药| 沙门氏菌用什么药最好| 这个人就是娘是什么歌| 喝什么茶能降血压| 大什么什么针| 孩子拉肚子吃什么食物好| 睡觉总醒是什么原因| 大便呈绿色是什么原因| 埋汰什么意思| 阴疽是什么病| 什么叫戒断反应| 美甲做多了有什么危害| 小舅子是什么关系| 市政协常委是什么级别| 1977年是什么命| 知了代表什么生肖| 元参别名叫什么| 十月十四是什么星座| 宝宝积食发烧吃什么药| 左肾小结石是什么意思| ki67是什么意思| 肺部ct挂什么科| 89年属蛇是什么命| k2是什么| 荔枝为什么上火| 水化是什么意思| 宫颈切片检查是什么| 胡萝卜炒什么| 什么的故事填词语| 翊读什么| 七月出生的是什么星座| 老花眼视力模糊有什么办法解决吗| 米参念什么| 室早是什么意思| 脱肛和痔疮有什么区别| 什么是乐高| 77岁属什么生肖| 86岁属什么| 藏红花有什么作用和功效| 妍什么意思| 拉屎擦屁股纸上有血什么原因| 什么忙什么乱| 彩超低回声是什么意思| 马子什么意思| 口腔溃疡吃什么水果好得快| 什么是优质蛋白食物| 铁蛋白高吃什么药能降下来| 头晕目眩吃什么药| 荷花像什么| 眩光是什么意思| 什么情况下喝补液盐| 左肾小结石是什么意思| 三高人群适合吃什么| 二甲双胍什么时候吃| 切除胆囊有什么影响| 手指甲有黑色条纹是什么原因| 胃热口干口苦口臭吃什么药好| 喝最烈的酒下一句是什么| 近视用什么镜矫正| 为什么叫五十肩| pcr医学上是什么意思| pocky是什么意思| 吃什么可以增加抵抗力和免疫力| 百度

华媒:7年来最低 巴西去年国内机票价格降0.6%

百度 要主动加强同有关方面的联系和协作,建立健全各级农村社会保险管理机构,完善管理服务体系。

汇集网友智慧,解决技术难题

21ic问答首页 - TMS320F280049使用SPI作为从机通讯和ADC采样冲突问题

DSP TI 技术交流 使用 从机 TMS320F280049

TMS320F280049使用SPI作为从机通讯和ADC采样冲突问题 赏300家园币

qiuyuhai2025-08-04
我想请教一下各位大佬,遇到了下面这个问题,恳请提供建议和帮助,谢谢!描述和问题如下:
1.使用了SPIA,作为从机,比特率为15M,FIFO的接收和发送的深度都为8,同步收发16位的200个数组元素的数组。
2.SPI启用了DMA的CH4(RX)、CH5(TX),都为循环模式,burst_size=8,transfer_size=25,都开启了循环模式。
3.ADC使用了EPWM的SOC触发采样,使用了三个ADC,ADC1,、ADC2、ADC3,分别采样128个数据。
4.ADC分别使用了CH1、CH2、CH3
5.问题现象:现在的工况是工作是开启ADC采样DMA发送完成触发中断后调用函数执行FFT以及触发CLA任务完成后再次开启采样,直道工作接收停止这个循环过程;SPI配置好和主机同步后就一直通过DMA循环接收,中间不停止不重启,现在是只要不启动工作,SPI的通讯收发是正常的,但是只要开启工作,ADC一直开始采样,SPI的接收FIFO就会溢出,清除标志位也一样很快溢出,调试看DMA的发送完成中断触发的时间变慢了,一溢出通讯就异常了,是因为DMA总线被ADC一直大量占用了吗,还是中断的优先级比其他的低导致SPI的中断和DMA的中断相应不及时导致的,试了降低比特率和FIFO的阈值都起不到效果, 恳请给出好的建议!!!
一下是程序的一些配置:
void ADC_init(){
//AD_PI initialization
// ADC Initialization: Write ADC configurations and power up the ADC
// Configures the ADC module's offset trim
ADC_setOffsetTrimAll(ADC_REFERENCE_EXTERNAL,ADC_REFERENCE_3_3V);
// Configures the analog-to-digital converter module prescaler.
ADC_setPrescaler(AD_PI_BASE, ADC_CLK_DIV_2_0);
// Sets the timing of the end-of-conversion pulse
ADC_setInterruptPulseMode(AD_PI_BASE, ADC_PULSE_END_OF_CONV);
// Powers up the analog-to-digital converter core.
ADC_enableConverter(AD_PI_BASE);
// Delay for 1ms to allow ADC time to power up
DEVICE_DELAY_US(500);
// SOC Configuration: Setup ADC EPWM channel and trigger settings
// Disables SOC burst mode.
ADC_disableBurstMode(AD_PI_BASE);
// Sets the priority mode of the SOCs.
ADC_setSOCPriority(AD_PI_BASE, ADC_PRI_ALL_ROUND_ROBIN);
// Start of Conversion 0 Configuration
// Configures a start-of-conversion (SOC) in the ADC and its interrupt SOC trigger.
// SOC number : 0
// Trigger : ADC_TRIGGER_EPWM3_SOCA
// Channel : ADC_CH_ADCIN0
// Sample Window : 16 SYSCLK cycles
// Interrupt Trigger: ADC_INT_SOC_TRIGGER_NONE
ADC_setupSOC(AD_PI_BASE, ADC_SOC_NUMBER0, ADC_TRIGGER_EPWM3_SOCA, ADC_CH_ADCIN0, 16U);
ADC_setInterruptSOCTrigger(AD_PI_BASE, ADC_SOC_NUMBER0, ADC_INT_SOC_TRIGGER_NONE);
// ADC Interrupt 1 Configuration
// SOC/EOC number : 0
// Interrupt Source: enabled
// Continuous Mode : enabled
ADC_setInterruptSource(AD_PI_BASE, ADC_INT_NUMBER1, ADC_SOC_NUMBER0);
ADC_enableInterrupt(AD_PI_BASE, ADC_INT_NUMBER1);
ADC_clearInterruptStatus(AD_PI_BASE, ADC_INT_NUMBER1);
ADC_enableContinuousMode(AD_PI_BASE, ADC_INT_NUMBER1);
//AD_SI initialization
// ADC Initialization: Write ADC configurations and power up the ADC
// Configures the ADC module's offset trim
ADC_setOffsetTrimAll(ADC_REFERENCE_EXTERNAL,ADC_REFERENCE_3_3V);
// Configures the analog-to-digital converter module prescaler.
ADC_setPrescaler(AD_SI_BASE, ADC_CLK_DIV_2_0);
// Sets the timing of the end-of-conversion pulse
ADC_setInterruptPulseMode(AD_SI_BASE, ADC_PULSE_END_OF_CONV);
// Powers up the analog-to-digital converter core.
ADC_enableConverter(AD_SI_BASE);
// Delay for 1ms to allow ADC time to power up
DEVICE_DELAY_US(500);
// SOC Configuration: Setup ADC EPWM channel and trigger settings
// Disables SOC burst mode.
ADC_disableBurstMode(AD_SI_BASE);
// Sets the priority mode of the SOCs.
ADC_setSOCPriority(AD_SI_BASE, ADC_PRI_ALL_ROUND_ROBIN);
// Start of Conversion 0 Configuration
// Configures a start-of-conversion (SOC) in the ADC and its interrupt SOC trigger.
// SOC number : 0
// Trigger : ADC_TRIGGER_EPWM3_SOCA
// Channel : ADC_CH_ADCIN4
// Sample Window : 16 SYSCLK cycles
// Interrupt Trigger: ADC_INT_SOC_TRIGGER_NONE
ADC_setupSOC(AD_SI_BASE, ADC_SOC_NUMBER0, ADC_TRIGGER_EPWM3_SOCA, ADC_CH_ADCIN4, 16U);
ADC_setInterruptSOCTrigger(AD_SI_BASE, ADC_SOC_NUMBER0, ADC_INT_SOC_TRIGGER_NONE);
// ADC Interrupt 1 Configuration
// SOC/EOC number : 0
// Interrupt Source: enabled
// Continuous Mode : enabled
ADC_setInterruptSource(AD_SI_BASE, ADC_INT_NUMBER1, ADC_SOC_NUMBER0);
ADC_enableInterrupt(AD_SI_BASE, ADC_INT_NUMBER1);
ADC_clearInterruptStatus(AD_SI_BASE, ADC_INT_NUMBER1);
ADC_enableContinuousMode(AD_SI_BASE, ADC_INT_NUMBER1);
//AD_SU initialization
// ADC Initialization: Write ADC configurations and power up the ADC
// Configures the ADC module's offset trim
ADC_setOffsetTrimAll(ADC_REFERENCE_EXTERNAL,ADC_REFERENCE_3_3V);
// Configures the analog-to-digital converter module prescaler.
ADC_setPrescaler(AD_SU_BASE, ADC_CLK_DIV_2_0);
// Sets the timing of the end-of-conversion pulse
ADC_setInterruptPulseMode(AD_SU_BASE, ADC_PULSE_END_OF_CONV);
// Powers up the analog-to-digital converter core.
ADC_enableConverter(AD_SU_BASE);
// Delay for 1ms to allow ADC time to power up
DEVICE_DELAY_US(500);
// SOC Configuration: Setup ADC EPWM channel and trigger settings
// Disables SOC burst mode.
ADC_disableBurstMode(AD_SU_BASE);
// Sets the priority mode of the SOCs.
ADC_setSOCPriority(AD_SU_BASE, ADC_PRI_ALL_ROUND_ROBIN);
// Start of Conversion 0 Configuration
// Configures a start-of-conversion (SOC) in the ADC and its interrupt SOC trigger.
// SOC number : 0
// Trigger : ADC_TRIGGER_EPWM3_SOCA
// Channel : ADC_CH_ADCIN0
// Sample Window : 16 SYSCLK cycles
// Interrupt Trigger: ADC_INT_SOC_TRIGGER_NONE
ADC_setupSOC(AD_SU_BASE, ADC_SOC_NUMBER0, ADC_TRIGGER_EPWM3_SOCA, ADC_CH_ADCIN0, 16U);
ADC_setInterruptSOCTrigger(AD_SU_BASE, ADC_SOC_NUMBER0, ADC_INT_SOC_TRIGGER_NONE);
// ADC Interrupt 1 Configuration
// SOC/EOC number : 0
// Interrupt Source: enabled
// Continuous Mode : enabled
ADC_setInterruptSource(AD_SU_BASE, ADC_INT_NUMBER1, ADC_SOC_NUMBER0);
ADC_enableInterrupt(AD_SU_BASE, ADC_INT_NUMBER1);
ADC_clearInterruptStatus(AD_SU_BASE, ADC_INT_NUMBER1);
ADC_enableContinuousMode(AD_SU_BASE, ADC_INT_NUMBER1);
}
void FB_start(void)
{
EPWM_clearADCTriggerFlag(EPWM_AD_BASE, EPWM_SOC_A);
ADC_clearInterruptStatus(AD_PI_BASE, ADC_INT_NUMBER1);
ADC_clearInterruptStatus(AD_SI_BASE, ADC_INT_NUMBER1);
ADC_clearInterruptStatus(AD_SU_BASE, ADC_INT_NUMBER1);
DMA_clearTriggerFlag(DMA_CH1_BASE);
DMA_clearTriggerFlag(DMA_CH2_BASE);
DMA_clearTriggerFlag(DMA_CH3_BASE);

// Clearing all pending interrupt flags & Start DMA
//DMA_clearTriggerFlag(DMA_CH1_BASE);
DMA_startChannel(DMA_CH1_BASE);
//DMA_clearTriggerFlag(DMA_CH2_BASE);
DMA_startChannel(DMA_CH2_BASE);
//DMA_clearTriggerFlag(DMA_CH3_BASE);
DMA_startChannel(DMA_CH3_BASE);
EPWM_enableADCTrigger(EPWM_AD_BASE, EPWM_SOC_A);
}
SPI配置:
SPi_To_N32_Init();
// //
// // Initialize DMA
// //
// DMA_initController();
DMA_triggerSoftReset(DMA_CH4_BASE);
DMA_triggerSoftReset(DMA_CH5_BASE);
//----------------------------------------------------------------------------------------------------------------------------------
// DMA channel 4 set up for SPI_RX
DMA_configAddresses(DMA_CH4_BASE, (uint16_t *)DSP_RxArray, (uint16_t *)(SCR_SPI_BASE + SPI_O_RXBUF));
// Perform enough 16-word bursts to fill the results buffer. Data will be
// transferred 32 bits at a time hence the address steps below.
DMA_configBurst(DMA_CH4_BASE, burst_size, 0, 1);
DMA_configTransfer(DMA_CH4_BASE, transfer_size, 0, 1);
DMA_configMode(DMA_CH4_BASE, DMA_TRIGGER_SPIARX, (DMA_CFG_ONESHOT_DISABLE | DMA_CFG_CONTINUOUS_ENABLE | DMA_CFG_SIZE_16BIT));
//
// Configure DMA Ch4 interrupts
//
DMA_setInterruptMode(DMA_CH4_BASE, DMA_INT_AT_END);
DMA_enableInterrupt(DMA_CH4_BASE);
DMA_enableTrigger(DMA_CH4_BASE);
// DMA channel 5 set up for SPI_TX
DMA_configAddresses(DMA_CH5_BASE, (uint16_t *)(SCR_SPI_BASE + SPI_O_TXBUF), (uint16_t *)DSP_TxArray);
// Perform enough 16-word bursts to fill the results buffer. Data will be
// transferred 32 bits at a time hence the address steps below.
DMA_configBurst(DMA_CH5_BASE, burst_size, 1, 0);
DMA_configTransfer(DMA_CH5_BASE, transfer_size, 1, 0);
DMA_configMode(DMA_CH5_BASE, DMA_TRIGGER_SPIATX, (DMA_CFG_ONESHOT_DISABLE | DMA_CFG_CONTINUOUS_ENABLE | DMA_CFG_SIZE_16BIT));
//
// Configure DMA Ch5 interrupts
//
DMA_setInterruptMode(DMA_CH5_BASE, DMA_INT_AT_END);
DMA_enableInterrupt(DMA_CH5_BASE);
DMA_enableTrigger(DMA_CH5_BASE);
//SCR_SPI initialization
SPI_disableModule(SCR_SPI_BASE);
SPI_clearInterruptStatus(SCR_SPI_BASE, SPI_INT_RXFF | SPI_INT_TXFF);
SPI_setFIFOInterruptLevel(SCR_SPI_BASE, SPI_FIFO_TX8, SPI_FIFO_RX8);
SPI_setConfig(SCR_SPI_BASE, DEVICE_LSPCLK_FREQ, SPI_PROT_POL0PHA1,
SPI_MODE_SLAVE, 15000000, 16);
SPI_disableLoopback(SCR_SPI_BASE);
SPI_enableFIFO(SCR_SPI_BASE);
SPI_setEmulationMode(SCR_SPI_BASE, SPI_EMULATION_STOP_MIDWAY);
SPI_enableInterrupt(SCR_SPI_BASE, SPI_INT_RXFF | SPI_INT_TXFF);
SPI_enableModule(SCR_SPI_BASE);
// SPI_FIFO
DMA_startChannel(DMA_CH4_BASE);
DMA_startChannel(DMA_CH5_BASE);
}
回答 +关注 1
2973人浏览 1人回答问题 分享 举报
1 个回答
  • 建议你把程序里面所有的中断程序的执行时间确认清楚,主要是ADC中断(计算EPWM占空比?)、SPI DMA中断这两个的执行时间,再看进入中断的频率,就可以知道是否有占用了。从调试的角度,把进入中断的频率降低,看问题是否改善也可以

您需要登录后才可以回复 登录 | 注册

罗字五行属什么 星星为什么眨眼睛 双手抱在胸前代表什么 88岁属什么生肖 西瓜不能跟什么一起吃
吃什么流产最快 1946年属什么生肖 吃优甲乐不能吃什么 沙茶酱什么味道 胎菊和金银花一起泡水有什么效果
降头是什么意思 什么红什么赤 棉花代表什么生肖 腮腺炎是什么原因引起的 阳五行属什么
什么地生长 狗狗咳嗽吃什么药好得快 乳腺小叶增生是什么意思 歌字五行属什么 纤维蛋白原偏低吃什么
黑枸杞泡水喝有什么作用和功效xinmaowt.com eob是什么意思hcv8jop0ns8r.cn 护理部是干什么的luyiluode.com 河南南阳产什么玉hcv9jop1ns0r.cn 空亡是什么意思hcv8jop9ns5r.cn
primark是什么牌子clwhiglsz.com 女鼠和什么属相最配对jasonfriends.com 960万平方千米是指我国的什么hcv8jop4ns2r.cn 梦见兔子是什么预兆hcv8jop3ns8r.cn 果可以加什么偏旁hcv8jop8ns1r.cn
长命锁一般由什么人送hcv9jop5ns6r.cn 牙周炎用什么药最好hcv7jop5ns6r.cn 蜜蜂蜇人后为什么会死去hcv8jop6ns7r.cn 奇妙的什么tiangongnft.com 牙齿酸是什么原因bysq.com
毛主席女儿为什么姓李96micro.com 有口臭去医院挂什么科hcv9jop2ns5r.cn 宝宝腹泻吃什么药sanhestory.com 跑步什么时候跑最好hcv8jop7ns4r.cn 身心合一是什么意思hcv9jop4ns6r.cn
百度