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.

[参考译文] CC2541DK-mini:CC2541

Guru**** 2568565 points
Other Parts Discussed in Thread: CC2540

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/584582/cc2541dk-mini-cc2541

部件号:CC2541DK-mini
主题:CC2540中讨论的其他部件

我尝试用计时器和DMA来组成一个shim。 在DMA的帮助下,我想在计时器的比较寄存器中记下这些值。 我花费了初始化时间,但由于某种原因,DMA上的中断不起作用。 请帮帮我。

静态uint8 a;
静态uint8低= 0x0C;
静态uint8高= 0x1A;
静态uint8 comp_mas[24];

DMA_DESC T3_DMA;

void rgm_init(void)

#IF已定义( CC2540_MINIDK )
//RGB подсоединен к P1_4
//Будем использовать 计时器3通道1

PERCFG >=~0x20;//计时器3备用位置1
P1DIR |= 0x10;// P1_4 =输出
T3CTL &=~0xE0;//预校准器= 1

T3CTL &=~0x10;//停止计时器3 (如果正在运行)
T3CTL &=~0x08;//禁用计时器3溢出中断
T3CTL |= 0x02;//计时器3模式= 1 -模数

T3CCTL0 &=~0x40;//禁用通道0中断
T3CCTL0 |= 0x04;// Ch0模式=比较


T3CCTL1 &=~0x40;//启用通道1中断
T3CCTL1 |= 0x04;// Ch1模式=比较
T3CCTL1 |= 0x20;//通道1输出比较模式=100

#endif
}


//Процедура Отправки данных RGB
void rgm_start( UINT32 mas )

UINT32 A;

rgm_init();

A = 0x80万;

对于(i=0;i < 24;i++)

如果((mas和a)= 0x00)

comp_mas[i]=低;
}
否则

comp_mas[i]=高;
}

A = A >> 1;
}

T3CTL |= 0x04;//清除计时器3.

T3CC0 = 0x28;//Установим значение до которого считать(частота 32МГц(0.0.3125万 мкс,период 1.25 мкс)

T3CC1 = comp_mas[0];

timerStartDma (&T3_DMA,(&comp_mas[1]));

P1SEL |= 0x10;
T3CTL |= 0x10;//启动计时器


同时(1)


}

T3CTL &=~0x10;//停止计时器3.
P1SEL &=~0x10;
P1_4 = 0;

}

void timerStartDma (DMA_DESC *timerDmaDescr,

UINT8 *时间/会议/会议/会议/会议/会议/会议/会议

timerDmaDescr ->SRCADDRH =(无符号短整型)(TimerBuf)>8;
timerDmaDescr ->SRCADDRL =(无符号短整型)(TimerBuf);
timerDMaDescr -> DESTADDRH = 0x70;
timerDMaDescr -> DESTADDRL = 0xCF;
timerDmaDescr -> LENH = 0x00;
TimerDmaDescr -> LENL =23;

timerDmaDescr -> VLEN = HAL_DMA_VLEN_USE_LEN;
timerDmaDescr ->WORDSIZE = HAL_DMA_WORDSIZE_BYTE;
timerDmaDescr -> TMODE = HAL_DMA_TMODE_single;
timerDmaDescr -> trig = HAL_DMA_TRIG _T3_CH0;
timerDmaDescr ->SRCINC = HAL_DMA_SRCINC_1;
timerDmaDescr ->DESTINC = HAL_DMA_DSTINC_0;
timerDmaDescr ->IRQMACK = HAL_DMA_IRQMASK_ENE;
timerDmaDescr ->M8 = HAL_DMA_M8_USE_8_bits;
timerDmaDescr ->优先级= HAL_DMA_PRI_HIGH;


DMA0CFGH =(unsigned char)((unsigned short) timerDmaDesc>>8);
DMA0CFGL =(unsigned char)((unsigned short) timerDmaDescr & 0xFF);

DMAARM = 0x01;
ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");
ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");
ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");
ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");
ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");
ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");ASM ("NOP");
ASM ("NOP");ASM ("NOP");ASM ("NOP");

IEN0 |= 0x80;
IEN1 |= 0x01;
IRCON &=~0x01;

}

_pragma (向量= dma_vector)
__interrupt void DMA_ISR(void)


IRCON &=~0x01;

IF (DMAIRQ和0x02)

DMAIRQ &=~0x02;
}

}

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

    我已指派我们的一位专家来研究这一问题。

    谢谢,
    Fredrik
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Evgeniy,
    您的DMA_DESC定义是否与此类似?

    //将位域成员从最高位放置到最低位。
    #pragma bitfields=反向
    typedef结构{
    unsigned char srcAddrH;
    unsigned char srcAddrL;
    无符号char destAddrH;
    无符号char destAddrL;
    无符号字符vlen 3人;
    无符号字符长度H 5人;
    无符号字符lenL 8人;
    无符号字符文字大小:1;
    无符号字符模式 2人;
    无符号字符触发 5人;
    unsigned char srcinc:2;
    unsigned char destinc:2;
    unsigned char irqMask :1;
    无符号字符M8 1人;
    无符号字符优先级:2;
    } DMA_DESC;
    #pragma bitfields=default