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.

[参考译文] Linux/AM3352:使用引脚 McASP0_aclkx 生成时钟

Guru**** 2551110 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/617983/linux-am3352-use-pin-mcasp0_aclkx-to-generate-clock

器件型号:AM3352

工具/软件:Linux

大家好、

我们的定制板上没有音频、因此我没有使用 McASP 驱动器。

但我们的蜂鸣器连接到引脚(V16)、以生成驱动蜂鸣器的信号、

蜂鸣器需要获取时钟信号(高->低->高->低)、因此我认为我可以使用引脚(V16)作为 McASP0_aclkx ti 生成时钟信号、

我编写了一个模块(.ko)来配置此引脚:  

#define base 0x46000000
#define size 0x400000 //4MB
#define ACLKX bb0

static int test_init (void)
{
u32 reg;

printk ("蜂鸣器启动!\n");

if (!request_mem_region (base、size、"simeer")){
PR_ERR ("request_mem_region failed!\n");
返回-1;
}

PR_INFO ("request_mem_region sulation!\n");

base = ioremap_nocache (base、size);
if (base =NULL){
PR_ERR ("ioremap failed!\n");
返回-1;
}

PR_INFO ("ioremap_Success!\n");

//_raW_WRITE (bit (5)| bit (7)、base+ACLKX);

reg =__raW_read (base);

PR_INFO ("reg =%lx\n"、reg);

返回0;
}

但在_raW_read (reg)中已死区:

未处理的故障:在0xd1000000处的非线性获取(0x1028)上的外部中止

(笑声)

(笑声)

McASP0基地址是否为0x46000000? 或者我需要使用 Hole McASP 驱动程序吗?

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

    我似乎需要启用一些时钟或电源、从而读取 McASP 寄存器、但我不知道需要打开哪个、是否有人可以告诉我?

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

    我建议您参考 AM335x TRM McASP 部分以检查寄存器配置。
    www.ti.com/.../spruh73p.pdf

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复
    在 TRM 中、McASP0 CFG 物理地址应为0x4803_8000、大小应为8KB

    参考文献:表2-3。 L4_PER 外设存储器映射(续)

    因此。 我的代码应像这样修改:

    #define base 0x48038000
    #define SIZE SIZE SIZE SIZE 8K
    #define ACLKX 0xb0

    静态 int test_init (void)

    u32 reg;

    printk ("蜂鸣器启动!\n");

    if (!request_mem_region (base、size、"simeer")){
    PR_ERR ("request_mem_region failed!\n");
    返回-1;


    PR_INFO ("request_mem_region sulation!\n");

    base = ioremap_nocache (base、size);
    if (base =NULL){
    PR_ERR ("ioremap failed!\n");
    返回-1;


    PR_INFO ("ioremap_Success!\n");

    reg =__raW_read (base);//读取修订版号

    PR_INFO ("reg =%lx\n"、reg);

    返回0;


    在 TRM 中、偏移量0x0h 是版本标识寄存器、但我仍然无法读取它!
    我迷路了吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Phil、

    您需要首先在器件 PRCM 中启用 McASP0、请参阅地址0x44E00034处的寄存器 CM_PER_McASP0_CLKCTRL。

    然后可在基地址0x48038000处访问 McASP0寄存器

    此致、
    帕维尔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    明白了! 非常感谢!