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.

[参考译文] CC2510:睡眠定时器中断问题

Guru**** 633810 points
Other Parts Discussed in Thread: CC2510, CC2510F8
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/833722/cc2510-sleep-timer-interrupt-issue

器件型号:CC2510

上周、我们的代码测试失败(停止处理睡眠定时器中断)。

我们现在已经生成了一个150行汇编器代码示例、其中没有显示问题。

代码设置一个睡眠定时器的时间为 ca 2秒、并在处理时翻转一个 prot 位。

无论它是否起作用、都取决于某些代码对齐和端口寄存器写入。 (请参阅代码中的注释)

 

该代码在 TI 的 CC2510EM 3.0模块上进行测试

 

;按预期运行时,它将每秒切换一次 p1.0引脚
;和 p1.3将始终保持低电平
;失败时,P1停止切换

;要查看问题,需要更改的内容:
;第80-81行:注释掉这些行中的一个或两个,如果它们运行或失败,则会发生变化
;第98行:0xa6可以写入 P0,但不能写入0xa8
;第131行:对齐睡眠代码的“睡眠”部分似乎有所帮助


$NOMOD51;禁用 IDE 预定义的8051寄存器

SFR P1DIR = 0xFE
SFR P1 = 0x90
SFR WORTIME0 = 0xA5
SFR WOREVT1 = 0xA4
SFR WOREVT0 = 0xA3
SFR CLKCON=0xC6
SFR WORIRQ = 0xA1
SBIT STIE = 0xAD
SBIT EA = 0xAF
SFR P2 = 0xA0
SFR P0 = 0x80
SFR PSW = 0xD0
SBIT STIF = 0xC7
SFR DMA0CFGH = 0xD5
SFR DMA0CFGL = 0xD4
SFR DMAARM = 0xD6
SFR MEMCTR = 0xC7
SFR 睡眠= 0xBE
SFR DMAREQ = 0xD7
SFR PCON=0x87

使用0
ISEG at 80h;在间接可寻址 RAM 中声明一个段
stack:ds 20h;保留32字节 mem 空间(80h 至9Fh)。

;设置中断矢量

CSEG 位于0x00
LJMP 启动

CSEG 位于0x23
LJMP ISR_NOT _已实现

;5. ST (睡眠定时器比较):

CSRG 位于0x2B
LJMP ISR_st;3字节。 0x2E 0x30

CSRG 位于0x100
未实现的 ISR_ISR_:
SETB p1.3
JMP ISR_NOT _已实现

START:MOV SP、#STACK-1

;将系统时钟设置为 RC,13MHz,保留所有其它设置:

MOV P1DIR,#0x09;P1.0闪烁1秒,P1.3指示是否发生其他中断

;等待执行计时器 eedge
MOV A、WORTIME0
LOOP_2:CJNE A、WORTIME0、EDGE_2
JMP LOOP_2

EDGE_2:;设置2秒(大约)睡眠超时
MOV WOREVT1、#HIGH 33333d
MOV WOREVT0、#LOW 33333d

ORL WORIRQ,#00010000b;启用睡眠定时器模块-内部(EVENT0_MASK)
SETB STIE;启用睡眠定时器 CPU 内部。 (IEN0.STIE)
SETB EA

-------------------------------------------------------
MOV P2、#00000011b;注释掉这一行、它将不断失败
MOV P1、#01000011b;注释掉此行、它始终有效、也可以注释掉上行


SLEEP_LOOP:调用 ENTER_SLEEP;睡眠测试循环
JMP SLEEP_LOOP

可重置

;'********* ISR_ST

ISR_st:
按 PSW

CLR STIF
ANL WORIRQ、#111110b

cpl P1.0;切换 p1.0,每扇区一端
MOV P0、#0xA6;正在移动0xA6、如果将0xA8移动到 p0则失败(P1停止切换)

弹出 PSW
RETI

ENTER_SLEEP:
;我们不会测试是否有足够的时间,因为在此测试中,它始终有足够的时间来休眠

MOV DMA0CFGH、#high hiber_dma_conf;(定义如下)
MOV DMA0CFGL、#low hiber_dma_conf
MOV DMAARM、#0000$0001b;读取配置和 ARM 通道0


MOV A、WORTIME0
循环:CJNE A、WORTIME0、EDGE
JMP 环路

EDGE:ORL MEMTR,#00000010b;禁用闪存
MOV 睡眠、#00000110b;设置 PM2
NOP;NOP 是必需的
NOP;必需
NOP;必需
;定时关键代码:
立即调用 SLEEP_NOW
可重置

;----- ------- ------- ------- ------- ------- ------- ------- ------- -

_DMA_DATA_PM2:dB 0x06、0x06、0x06、0x06、0x06、 0x06、0x04

Hiber_DMA_conf:DW _DMA_DATA_PM2
DB 0xDF、0xBE、0x00、0x07、0x20、 0x42

CSEG 位于0x6246;发生故障的 somtimes
;CSEG 位于0x624A;在所有示例中工作
;对齐关键,0x624A 似乎始终工作
;定时关键代码:
立即睡眠:
MOV DMAREQ、#0000$0001b;触发通道0 (仅限 PM2)
nop;所有 DMA 传输精确<<<<< ===================================================================================
ORL PCON、#0000$0001b;进入睡眠模式
NOP;在此 NOP 之后,ISR 是向量的
可重置

结束

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我将把这篇文章转发给我们的专家。

    谢谢、

    SAI

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,您是否有机会提供有关进度的最新信息? 这是生产线停止问题

    非常感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您是否在此处的基本软件示例中尝试过睡眠定时器示例代码:

    http://www.ti.com/product/CC2510/toolssoftware

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我将检查一下、但是对于证明该问题的发送代码、您能重复一下该问题

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    请尝试查看您是否可以在 c 代码中重现问题。

    谢谢、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们现在已经研究了 IAR 工作平台和 CC2510迷你 DK 软件示例 (swrc133)。

    我们还在 IAR 工作平台中实现了我们的示例。

     

    我们在勘误表中确实有一个问题。

    是否允许将 PM2_BUF 放置在闪存中?

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我认为这应该是可能的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ajayt、

    尽管数据表中没有明确说明、但如在 SW 示例中实现的那样、PM2_BUF (和 PM3_BUF)必须放置在"缓慢访问" RAM 中。 对于 CC2510F8、这位于0x00F000 - 0x00F2FF;对于 CC2510F16、这位于0x00F000 - 0x00F6FF;对于 CC2510F32、这位于0x00F000 - 0x00FDA1。  

    此致、
    Fredrik