页次: 1
D213的串口是缺省用48M的频率, 所以最高波特率是: 3M (48/16), 如果要用其他更高的波特率, 需要修改串口输入时钟
问题已解决, 原因是icache问题, 在调用call()之前, 需要执行一条icache.iall, 让指令缓冲失效
想了一天, 还是没有什么头绪
D213执行下面的程序, 如果程序偏移量大于某个值(>2048, 更精确的值没有测试), 将进入异常处理
/*
* 此段程序的汇编为: (此段程序与位置无关)
* li a0, 111
* ret
*/
//该程序的地址为: 0x400012C0
u64 get_val(void)
{
return 111;
}
typedef u64 (*PROC)(void);
//该程序的地址为: 0x400012D0
void test_call(u64 addr)
{
PROC call = (PROC)addr;
memcpy((char *)addr, (char *)get_val, 16); //假定函数最长16字节
printf("val=%d\n", call());
}
测试样例:
test_call(0x42000000);
进入异常的信息:
CPU Exception: NO.2
x1(ra) : 00000000400013c4 x2(sp) : 000000004000d9ac
x3(gp) : 000000004000aa68 x4(tp) : 0022802011008002
x5(t0) : 000000004000b960 x6(t1) : 0000000000000000
x7(t2) : 000000000000000f x8(s0/fp): 0000000000000010
x9(s1) : 0000000040010010 x10(a0) : 000000000000000a
x11(a1) : 000000000000000a x12(a2) : 0000000040006e25
x13(a3) : 0000000018710000 x14(a4) : 00000000000f40e6
x15(a5) : 0000000000000020 x16(a7) : 000000004000d676
x17(a7) : 0000000000000010 x18(s2) : 0000000040006e20
x19(s3) : 0000000000000001 x20(s4) : 0000000000000010
x21(s5) : 0000000000000010 x22(s6) : 0000000040010000
x23(s7) : 00000000400012d0 x24(s8) : 0000000000000006
x25(s9) : 0000000000000100 x26(s10) : 0000000040011c48
x27(s11) : 8040408900812002 x28(t3) : 0000000040006ffc
x29(t4) : 0000000000000200 x30(t5) : 0000000000000000
x31(t6) : 0000000000000001
mcause : 0000000000000002 mtval : 0000000000000000
mepc : 0000000040010000 mstatus : 0000000a00001800
其实现在这样就挺好, 把一些复杂的设置打包起来, 只要再配上使用说明, 就可以让芯片更容易上手
谢谢回复, 倒是不需要源码开放, 只是需要一个使用说明, 用什么参数, 怎么调用之类的说明
D213启动的时候, 会打印一些字符, 内容如下:
Pre-Boot Program ... (24-01-23 14:12 e863544)
SD
DDR3 128MB
Going to init DDR3. freq: 672MHz
Open Spread Spectrum
DDR3 initialized
PBP return
请问这些字符串是否能屏蔽? 换种说法就是: PBP文件的使用方法(调用参数, 初始化了哪些设备等等), 能否开放?
已买的, 还送吗? D213, D133, 昆仑, 都买了 (昆仑还未发货)
请问D213ECV, 千兆网络带宽最高多少? 如果双网口都收发数据, 能多高带宽?
没有用过AGM的MCU, 不过有个信息可以参考一下, AGM176的FPGA, 内部SDRAM标称是166M的, 实际这个FPGA只能稳定运行在125M左右
@rick lou
留个联系方式要一份
正在做MT7621
页次: 1