公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

你好,

 

我想让 TriBoard TC387 5V 上的待机控制器与 AURIX Development Studio 配合使用。

为此,我拿了一些 Bifaces 演示代码并尝试将其包含在 TC387 SCR 项目中。

建筑物穿过而且 CarRay 生成正常(看起来),

但我 CAN没有任何针脚可以切换。

 

我使用的例程:

 

CPU0_main.c:

[...]

IfxScuWdt_clearSafetyEndinit(IfxScuWdt_getCpuWatchdogPassword());

//P33.0 - P33.7, P33.9 - P33.15 and P34.1 set for SCR use
while (P33_PCSR.B.LCK)
;
P33_PCSR.U = 0xFEFF;
while (P34_PCSR.B.LCK)
;
P34_PCSR.U = 0x0002;

//boot_mode=0 - XRAM not programmed
IfxScr_init(0);
IfxScuWdt_setSafetyEndinit(IfxScuWdt_getCpuWatchdogPassword());

// Write SCR program to XRAM
IfxScr_copyProgram();

IfxScuWdt_clearSafetyEndinit(IfxScuWdt_getCpuWatchdogPassword());

//boot_mode=1 - XRAM programmed
IfxScr_init(1);

IfxScuWdt_setSafetyEndinit(IfxScuWdt_getCpuWatchdogPassword());

while(1)

[...]

 

scr/Main.c:

#include "registers.h"

#define SCR_ISR __isr;
#define SFR(X) (*(__near volatile uint8_t*)(X))

#define SCR_RTC_RTCON SFR(ADDR_SCR_RTC_CON)

[...]

void togglePinPort0 (uint8_t pin_id)
{
SCR_IO_PAGE = 0; //Switch back to page 0
SCR_P00_OMTR = (1 << pin_id); //alternatively use OMCR Register Output Modifications Clear Register
// SCR_P00_OUT = 0;
}
void delay (void)
{
unsigned long ul = 50000;
while (ul)
{
--ul;
}
}

void main (void)
{
//
// /* SCU module configurations */
// SCR_SCU_PAGE = 1; /* Switch to page 1 */
//// SCR_PMCON1 = 0x7F; /* all functions including OCDS disabled */
// SCR_PMCON1 = 0x59; //enable RTC and disable other modules
// SCR_NMISR = 0x0; //clear all nmi flags
//
// SCR_SCU_PAGE = 0; /* Switch to page 1 */
// SCR_SYSCON0 = 0;
//
// while (SCR_SCU_SR != 0x08)
// ; //wait until TC enters standby mode
//
SCR_SCU_PAGE = 1;
MAIN_vUnlockProtecReg();
SCR_CMCON = 0x20; //close fback = 100MHz
// SCR_CMCON = 0x1C; // 500kHz
MAIN_vlockProtecReg();
//
// SCR_SCU_PAGE = 2;
// /* IO module configurations */
SCR_IO_PAGE = 2; //Switch to page 2
SCR_P00_PDISC = 0x00; // Enable all pads

SCR_IO_PAGE = 1; //Switch to page 1,
// SCR_P00_IOCR0 = 0x80; //P00 pin 0 is output (General-Purpose Push-Pull Output) -> PCx = 10000
// SCR_P00_IOCR1 = 0x80; //P00 pin 1 is output
// SCR_P00_IOCR2 = 0x80; //P00 pin 2 is output (General-Purpose Push-Pull Output) -> PCx = 10000
// SCR_P00_IOCR3 = 0x80; //P00 pin 3 is output
SCR_P00_IOCR4 = 0x80; //P00 pin 4 is output (General-Purpose Push-Pull Output) -> PCx = 10000
SCR_P00_IOCR5 = 0x80; //P00 pin 5 is output
// SCR_P00_IOCR6 = 0x80; //P00 pin 6 is output (General-Purpose Push-Pull Output) -> PCx = 10000
// SCR_P00_IOCR7 = 0x80; //P00 pin 7 is output

uint32_t test = 0;

SCR_IO_PAGE = 0; //Switch to page 0

while (1)
{
test++;
delay();
togglePinPort0(4); // toggle
togglePinPort0(5); // toggle
}
}

 

SDCC 编译:

12:29:23 **** Incremental Build of configuration SCR Debug (SDCC) for project TC387_with_SCR_2 ****
make --output-sync -j12 all 
Building file: ../SCR/main.c
Invoking: SDCC Compiler
sdcc --asm-scr -c --model-large -I"C:\Users\xyz\AURIX-v1.9.8-workspace\TC387_with_SCR_2\SCR" --std-sdcc99 --nooverlay --no-peep-return --opt-code-speed  "../SCR/main.c" -o "SCR/main.o"
Finished building: ../SCR/main.c
 
Invoking: SDCC Linker
i51-elf-ld -T"../SCR/scr.ld" --gc-sections -L"C:\Infineon\AURIX-Studio-1.9.8\tools\Compilers\sdcc_421/share/sdcc/lib/large" -lsdcc -lmcs51 -lint -lsdcc -llonglong -llong -lint -lfloat -Map="scr_a2g.map"   ./SCR/main.o   -o  "scr_a2g.elf"
Finished building: scr_a2g.elf
 
Building target: scr_a2g
Invoking: SDCC Object copy CArray
i51-elf-objcopy -O carray --osize 1 --otyp uint8_t --odef "scr_a2g".h --comments --hinc --xtern --olbl scr_xram --closegaps --hstdint  scr_a2g.elf  "scr_a2g".c
Finished building target: scr_a2g
 
cp *.c ../ && cp *.h ../
 

12:29:24 Build Finished. 0 errors, 0 warnings. (took 944ms)

 

到目前为止完全没有成功。 你们知道这可能会在哪里/为什么失败吗?

最好的问候

0 点赞
1 解答
Translation_Bot
Community Manager
Community Manager
Community Manager

你好 beamk,
1) “语义错误” 不是编译器错误,它们只是来自 Eclipse 的噪音。 通过以下方式禁用:P
roject | Properties | C/C++ General | Code An alysis
我建议保留 “潜在编程问题” 开启并禁用所有其他问题 但是请随心所欲 😊

2)) 我还看到了输出的奇怪行为,实际上是整个 8051 内核。 我还没有找出故障的原因,但我经常看到 XC800 只是卡住了。 我还在运行一个闪烁的 LED 循环,里面有一个字节计数器,我的主三核通过 UART 输出。 有时我的主循环无法运行(计数器不计数或计数一次),有时它会运行但输出不会切换。

在 SCR 代码中,这是计数器变量(XRAM
__xdata volatile __ 中特定地址的一个字节):at (0x1fe0) uint8 bShare
; 在循环中我只说 bshare++


在三核中,我通过以下方式读取了这个计数:volatile uint8* p bscrShare = ((v olatile uint8*) pms_XRAM + 0x1fe0);然后

Printf (scr=%d\ r\ n,*pbs crShare); "";

由于您的抱怨是输出不起作用,我确实发现的一件事是更改输出方法 CAN 帮助。 因此,与其说:
SCR_P00_OMTR = (1 p < < in_id);
试试
SCR_P00_OUT = SCR_ P00_OMTR =
SCR_P00_OMSR SCR_P00_OMC R 寄存器。< <

这不是解决方案,因为OMTR应该起作用。 但我还没有弄清楚为什么有时会因为代码的微不足道的变化而中断。 我还在找!

在原帖中查看解决方案

0 点赞
19 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

我不确定你的编码,但你应该先检查一下你的 TriBoards 是否支持它。 为此,请检查 TLF35584 是否已组装,如果是,请检查 QST Pin5 是否提供所需的 V_STBY 电压。

最好,

TBencher

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

此外,

如果未组装TLF35584,只需将3.3V或5V连接到AURIX的T11引脚,具体取决于您的设置。引脚一直路由到提到的 TLF 足迹,您 CAN 访问它。

最好,

TBencher

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

你好 tBencher,

谢谢你的回复。

TLF 已组装并运行(WDI 触发正确,没有 PORST),SS2 LED 已亮起。
待机电压为 5V(在 R520 上测量)。 VDDSB 的电压为 1,25V。


Best beamk

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

App-Note 是关于 AURIX 的"待机控制器和待机模式的... "

最好,

TBencher

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

好吧,

非常好。 我刚刚搜索了一些有用的材料。 过去有专门的 App-Note (AP32465) 可用。 但是这份文件不知何故消失了。 也许IFX的人 CAN 帮助。

最好,

TBencher

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

你好 tBencher,

我已经通读了你提到的 AppNote 并尝试了一些包含的代码,但无论哪种方式都无法让它起作用。 例如,我从那段代码中得到了将 P33 和 P34 的控制权移交给 SCR 的部分。

如果对我发布的代码有任何建议,我将不胜感激。


Best beamk

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

我没忘记你。 我需要多一点时间,因为要检查日常工作和其他项目。

最好,

TBencher

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

你好,

CAN 有人给我关于这个话题的进一步提示,因为我 CAN没有真正取得进展?

最诚挚的问候
beamk

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

你好 beamk,

我们还没来得及谈这个问题。
不幸的是,日常工作永远是第一位的。

最好,

TBencher

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

我目前在这个主题中的状态是我正在运行调试(至少在汇编基础上是如此)。
在那里,我 CAN 看到 SCR 进入 for 循环写入,例如0x08地址0x94(OMTR 寄存器),
但输出端什么也没发生。

尝试了几个不同的键盘 33.3、33.4-33.7(TriBoard 上有 LED)...

通过 P33_PCSR 更改引脚控制似乎至少起到了一些作用(执行此操作时 LED 会熄灭)。

 

这个预处理器定义会有问题吗?

= > #define SFR (X) (* (__near volatile uint8*) (X)))

除此之外,不知道哪里出了问题...

0 点赞
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

以下是 TC38x 的一个简单的 ADS SCR 程序。 P33.x 引脚由 SCR 控制。 当 SCR 运行时,它会有一个简单的软件延迟,它会在 P33.4 上闪烁 LED,然后在 P33.5 上打开 LED 即可。 这些是 TriBoard 上的 LED。

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

非常感谢,遗憾的是你的项目对我不起作用。 我想我的问题是由特殊函数寄存器的定义引起的。

使用你的代码时我遇到(所有)sfr 定义的语法错误,例如:在 ADDR_SCR_IO_PAGE SCR_IO_PAGE
__sfr __上 SCR_IO_PAGE;

因此, CAN 解析所有符号。
当使用重新安装的软件从头开始创建项目时,也会发生这种情况。

我以前遇到过这个问题,这就是我改成这行的原因:
#define SFR (X) (* (__near volatile uint8*) (X)))

 

知道为什么无法正确找到/使用 SDCC 指令吗?
你是如何配置项目的?你需要改变什么吗?

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

啊,更新——当忽略错误然后简单地用你的代码用 TriCore Debug 构建 & flash 时,它实际上可以正常工作。 指示灯正在闪烁。

知道我 CAN 如何摆脱错误吗? 我尝试包含 lint 和其他头文件,并在构建设置中手动定义一些符号,但没有成功。

 

另一个问题出现-当切换超过 2 个 LED 时(例如 IOCR4、IOCR5 和 IOCR6) 同时,程序只是在短时间后停止,否则 LED 根本无法亮起。

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

啊,更新——当忽略错误然后简单地用你的代码用 TriCore Debug 构建 & flash 时,它实际上可以正常工作。 指示灯正在闪烁。

知道我 CAN 如何摆脱错误吗? 我尝试包含 lint 和其他头文件,但没有成功。

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

不确定你指的是什么错误?

15:54:58 **** Incremental Build of configuration SCR Debug (SDCC) for project test_scr ****
make --output-sync -j8 all 
Building file: ../SCR/main.c
Invoking: SDCC Compiler
sdcc --asm-scr -c --model-large -I"D:\ads\tc38x\test_scr\SCR" --std-sdcc99 --nooverlay --no-peep-return --opt-code-speed  "../SCR/main.c" -o "SCR/main.o"
Finished building: ../SCR/main.c
 
Invoking: SDCC Linker
i51-elf-ld -T"../SCR/scr.ld" --gc-sections -L"C:\Infineon\AURIX-Studio-1.9.8\tools\Compilers\sdcc_421/share/sdcc/lib/large" -lsdcc -lmcs51 -lint -lsdcc -llonglong -llong -lint -lfloat -Map="scr_a2g.map"   ./SCR/main.o   -o  "scr_a2g.elf"
Finished building: scr_a2g.elf
 
Building target: scr_a2g
Invoking: SDCC Object copy CArray
i51-elf-objcopy -O carray --osize 1 --otyp uint8_t --odef "scr_a2g".h --comments --hinc --xtern --olbl scr_xram --closegaps --hstdint  scr_a2g.elf  "scr_a2g".c
Finished building target: scr_a2g
cp *.c ../ && cp *.h ../

15:54:59 Build Finished. 0 errors, 0 warnings. (took 949ms)

我还为 SCR 启用了 TriBoard 上的所有三个 LED,但运行时没有遇到任何问题。

void delay (void)
{
    unsigned long temp = 500000;
    while (temp)
    {
        --temp;
    }
}

void main ()
{
    unsigned char test = 0;

    /* IO module configurations */
    SCR_IO_PAGE = 2;      //Switch to page 2
    SCR_P00_PDISC = 0x00; //Enable all pads
    SCR_IO_PAGE = 1;      //Switch to page 1,
    SCR_P00_IOCR4 = 0x80; //P00 pin 4 is output (General-Purpose Push-Pull Output) -> PCx = 10000
    SCR_P00_IOCR5 = 0x80; //P00 pin 5 is output
    SCR_P00_IOCR6 = 0x80; //P00 pin 6 is output

    SCR_IO_PAGE = 0;      //Switch to page 0

    while (1)
    {
        test++;
        delay();
        SCR_P00_OMTR = 0x70;
    }
}
0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

这些是我遇到的问题 —— 看来索引/解析不起作用。

err_1.PNGerr_2.png

我将尝试用一个命令而不是三个命令来切换引脚,看看这是否奏效。 谢谢。

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

所以显然这行得通:

SCR_IO_PAGE = 0;SC
R_P00_OMTR = (1 PORT33_4_PIN_ID) | (1 PORT33_5_PIN_ID) | (1 P < < ORT33_6_PIN_ID);<<<<

 

这不起作用:

SCR_IO_PAGE = 0;SCR_P00_OMTR = (1 PORT33_ < < 4_PIN
_ID);scr_P00_OMTR = (1 PORT33_5_PIN_ID);SCR_P00_OMTR = (1 PORT33_6_PIN_ID);
<<
<<

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

你好 beamk,
1) “语义错误” 不是编译器错误,它们只是来自 Eclipse 的噪音。 通过以下方式禁用:P
roject | Properties | C/C++ General | Code An alysis
我建议保留 “潜在编程问题” 开启并禁用所有其他问题 但是请随心所欲 😊

2)) 我还看到了输出的奇怪行为,实际上是整个 8051 内核。 我还没有找出故障的原因,但我经常看到 XC800 只是卡住了。 我还在运行一个闪烁的 LED 循环,里面有一个字节计数器,我的主三核通过 UART 输出。 有时我的主循环无法运行(计数器不计数或计数一次),有时它会运行但输出不会切换。

在 SCR 代码中,这是计数器变量(XRAM
__xdata volatile __ 中特定地址的一个字节):at (0x1fe0) uint8 bShare
; 在循环中我只说 bshare++


在三核中,我通过以下方式读取了这个计数:volatile uint8* p bscrShare = ((v olatile uint8*) pms_XRAM + 0x1fe0);然后

Printf (scr=%d\ r\ n,*pbs crShare); "";

由于您的抱怨是输出不起作用,我确实发现的一件事是更改输出方法 CAN 帮助。 因此,与其说:
SCR_P00_OMTR = (1 p < < in_id);
试试
SCR_P00_OUT = SCR_ P00_OMTR =
SCR_P00_OMSR SCR_P00_OMC R 寄存器。< <

这不是解决方案,因为OMTR应该起作用。 但我还没有弄清楚为什么有时会因为代码的微不足道的变化而中断。 我还在找!

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 richo,

非常感谢你的帖子。 这很有帮助。 仍然会遇到一些问题,原因不明确,但至少我可以用 SCR 做一些测试。

最好的问候

0 点赞