{"id":969,"date":"2022-09-04T05:34:05","date_gmt":"2022-09-04T05:34:05","guid":{"rendered":"http:\/\/www.recologypower.com:9080\/?p=969"},"modified":"2022-09-04T05:34:06","modified_gmt":"2022-09-04T05:34:06","slug":"%e3%80%90imx6ull%e3%80%91%e4%bd%bf%e7%94%a8eim%e6%8e%a5%e5%8f%a3%e9%a9%b1%e5%8a%a8st16c554%e6%89%a9%e5%b1%95%e4%b8%b2%e5%8f%a3%e5%9f%ba%e4%ba%8e8250%e4%b8%b2%e5%8f%a3%e9%a9%b1%e5%8a%a8","status":"publish","type":"post","link":"http:\/\/www.recologypower.com:9080\/?p=969","title":{"rendered":"\u3010imx6ull\u3011\u4f7f\u7528EIM\u63a5\u53e3\u9a71\u52a8ST16c554\u6269\u5c55\u4e32\u53e3\u57fa\u4e8e8250\u4e32\u53e3\u9a71\u52a8"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u524d\u8a00<\/h2>\n\n\n\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u6700\u8fd1\u505a\u4e86\u4e00\u4e2a\u9879\u76ee\u4f7f\u7528\u7684\u6b63\u70b9\u539f\u5b50\u7684imx6ull\u6838\u5fc3\u677f\u5e73\u53f0\uff0c\u91cc\u9762\u6d89\u53ca\u5230\u4e86\u6709\u5173\u4e8e\u4f7f\u7528imx6ull\u7684EIM\u63a5\u53e3\u8fdb\u884c\u5916\u90e8<a rel=\"noreferrer noopener\" href=\"https:\/\/so.csdn.net\/so\/search?q=%E4%B8%B2%E5%8F%A3&amp;spm=1001.2101.3001.7020\" target=\"_blank\">\u4e32\u53e3<\/a>\u6269\u5c55\u7684\u90e8\u5206\uff0c\u4e32\u53e3\u6269\u5c55\u82af\u7247\u4f7f\u7528\u7684\u662fST16C554\u8fd9\u4e2a\u82af\u7247\u3002\u8fd9\u91cc\u9488\u5bf9\u8fd9\u90e8\u5206\u5185\u5bb9\u505a\u4e00\u4e2a\u8bb0\u5f55\u548c\u5206\u4eab\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e00\u3001\u786c\u4ef6\u8bbe\u8ba1\u90e8\u5206<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"892\" height=\"869\" src=\"http:\/\/www.recologypower.com:9080\/wp-content\/uploads\/2022\/09\/\u5fae\u4fe1\u622a\u56fe_20220602153141.png\" alt=\"\" class=\"wp-image-970\" srcset=\"http:\/\/www.recologypower.com:9080\/wp-content\/uploads\/2022\/09\/\u5fae\u4fe1\u622a\u56fe_20220602153141.png 892w, http:\/\/www.recologypower.com:9080\/wp-content\/uploads\/2022\/09\/\u5fae\u4fe1\u622a\u56fe_20220602153141-300x292.png 300w, http:\/\/www.recologypower.com:9080\/wp-content\/uploads\/2022\/09\/\u5fae\u4fe1\u622a\u56fe_20220602153141-768x748.png 768w, http:\/\/www.recologypower.com:9080\/wp-content\/uploads\/2022\/09\/\u5fae\u4fe1\u622a\u56fe_20220602153141-600x585.png 600w\" sizes=\"(max-width: 892px) 100vw, 892px\" \/><figcaption>\u56fe1. \u786c\u4ef6\u7535\u8def\u56fe<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e8c\u3001\u9a71\u52a8\u90e8\u5206<\/h2>\n\n\n\n<p>\u8bbe\u5907\u6811\u90e8\u5206<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pinctrl_COM1_8: COM1_8 {\r\n\t\t\tfsl,pins = &lt;\r\n\t\t\t\tMX6UL_PAD_LCD_DATA08__EIM_DATA00 0x10b1\r\n\t\t\t\tMX6UL_PAD_LCD_DATA09__EIM_DATA01 0x10b1\r\n\t\t\t\tMX6UL_PAD_LCD_DATA10__EIM_DATA02 0x10b1\r\n\t\t\t\tMX6UL_PAD_LCD_DATA11__EIM_DATA03 0x10b1\r\n\t\t\t\tMX6UL_PAD_LCD_DATA12__EIM_DATA04 0x10b1\r\n\t\t\t\tMX6UL_PAD_LCD_DATA13__EIM_DATA05 0x10b1\r\n\t\t\t\tMX6UL_PAD_LCD_DATA14__EIM_DATA06 0x10b1\r\n\t\t\t\tMX6UL_PAD_LCD_DATA15__EIM_DATA07 0x10b1\r\n\r\n\t\t\t\tMX6UL_PAD_CSI_PIXCLK__EIM_OE 0x10b1 \/* IO_RD *\/\r\n\t\t\t\tMX6UL_PAD_CSI_VSYNC__EIM_RW  0x10b1 \/* IO_WR *\/\r\n\r\n\t\t\t\tMX6UL_PAD_CSI_DATA00__EIM_AD00 0x10b1 \/* A0 *\/\r\n\t\t\t\tMX6UL_PAD_CSI_DATA01__EIM_AD01 0x10b1 \/* A1 *\/\r\n\t\t\t\tMX6UL_PAD_CSI_DATA02__EIM_AD02 0x10b1 \/* A2 *\/\r\n\t\t\t\tMX6UL_PAD_CSI_DATA03__EIM_AD03 0x10b1 \/* A3 \u6a21\u62df\u5f00\u5173\u9009\u62e9 *\/\r\n\t\t\t\tMX6UL_PAD_CSI_DATA04__EIM_AD04 0x10b1 \/* A4 \u6a21\u62df\u5f00\u5173\u9009\u62e9 *\/\r\n\t\t\t\tMX6UL_PAD_CSI_DATA05__EIM_AD05 0x10b1 \/* A5 \u6a21\u62df\u5f00\u5173\u9009\u62e9 *\/\r\n\r\n\t\t\t\tMX6UL_PAD_CSI_MCLK__EIM_CS0_B 0x10b1 \/* CS0 8\u90091 *\/\r\n\r\n\t\t\t\tMX6UL_PAD_LCD_DATA20__GPIO3_IO25 0x3000 \/* INTA1 *\/\r\n\t\t\t\tMX6UL_PAD_LCD_DATA19__GPIO3_IO24 0x3000 \/* INTB1 *\/\r\n\t\t\t\tMX6UL_PAD_LCD_DATA21__GPIO3_IO26 0x3000 \/* INTC1 *\/\r\n\t\t\t\tMX6UL_PAD_LCD_DATA18__GPIO3_IO23 0x3000 \/* INTD1 *\/\r\n\r\n\t\t\t\tMX6UL_PAD_LCD_DATA17__GPIO3_IO22 0x3000 \/* INTA2 *\/\r\n\t\t\t\tMX6UL_PAD_LCD_DATA16__GPIO3_IO21 0x3000 \/* INTB2 *\/\r\n\t\t\t\tMX6UL_PAD_LCD_DATA22__GPIO3_IO27 0x3000 \/* INTC2 *\/\r\n\t\t\t\tMX6UL_PAD_LCD_DATA23__GPIO3_IO28 0x3000 \/* INTD2 *\/\r\n\r\n\t\t\t\tMX6UL_PAD_GPIO1_IO05__GPIO1_IO05 0x10b1 \/* UART_RESET *\/\r\n\t\t\t>;\r\n<\/code><\/pre>\n\n\n\n<p>\u4e0a\u9762\u7684\u662f\u8bbe\u5907\u6811\u7684\u5f15\u811a\u5c5e\u6027\u8bbe\u7f6e\u90e8\u5206\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&amp;weim {\r\n\tpinctrl-names = \"default\";\r\n  \tpinctrl-0 = &lt;&amp;pinctrl_COM1_8>;\r\n\t#address-cells = &lt;2>;\r\n\t#size-cells = &lt;1>;\r\n\tfsl,weim-cs-gpr = &lt;&amp;gpr>;\r\n\tranges = &lt;0 0 0x50000000 0x08000000>;\r\n\tstatus = \"okay\";\r\n\r\n\tst16c554@0,8 {\r\n\t\tcompatible = \"st16c554\";\r\n\t\treg = &lt;0 0 0x08000000>;\r\n\t\tfsl,weim-cs-timing = &lt;0x00640081 0x00000001 0x1c022000\r\n\t\t\t\t\t0x0000c000 0x1404a38e 0x00000000>;\r\n\t};\r\n};\r\n<\/code><\/pre>\n\n\n\n<p>\u4e0a\u9762\u7684\u662f\u8bbe\u5907\u6811\u4e2d\u5173\u4e8eeim\u63a5\u53e3\u7684\u76f8\u5173\u8bbe\u7f6e\u3002\u8fd9\u91cc\u4e3b\u8981\u8bf4\u660e\u4e00\u4e0bfsl,weim-cs-timing\u5c5e\u6027\uff0c\u8be5\u5c5e\u6027\u5c31\u662f\u8bbe\u7f6eeim\u901a\u9053\u7684\u5bc4\u5b58\u5668\u503c\u7684\uff0cimx6ull\u7684eim\u63a5\u53e3\u6839\u636ecs\u8ba1\u7b97\u4e00\u51714\u4e2a\u901a\u9053\uff0c\u6211\u8fd9\u91cc\u901a\u8fc7ranges \u8bbe\u7f6e\u53ea\u4f7f\u7528\u4e86\u901a\u90530\uff0cfsl,weim-cs-timing\u7684\u516d\u4e2a\u503c\u5c31\u4f1a\u8bbe\u7f6e\u4e3a\u901a\u90530\u76846\u4e2a\u5bc4\u5b58\u5668\u5bf9\u5e94\u7684\u503c\u3002\u8bbe\u5907\u6811\u4e2d\u7684\u5176\u4ed6\u5c5e\u6027\u5bf9\u5e94\u7684\u610f\u4e49\u53ef\u4ee5\u53c2\u8003linux\u7684\u6587\u6863\u8bf4\u660eDocumentation\\devicetree\\bindings\\bus\\imx-weim.txt\uff0c\u5bc4\u5b58\u5668\u7684\u5177\u4f53\u542b\u4e49\u53c2\u8003imx6ull\u7684\u53c2\u8003\u6587\u6863\u5373\u53ef\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u5185\u6838\u914d\u7f6e<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"894\" height=\"540\" src=\"http:\/\/www.recologypower.com:9080\/wp-content\/uploads\/2022\/09\/\u5fae\u4fe1\u622a\u56fe_20220602153141-1.png\" alt=\"\" class=\"wp-image-971\" srcset=\"http:\/\/www.recologypower.com:9080\/wp-content\/uploads\/2022\/09\/\u5fae\u4fe1\u622a\u56fe_20220602153141-1.png 894w, http:\/\/www.recologypower.com:9080\/wp-content\/uploads\/2022\/09\/\u5fae\u4fe1\u622a\u56fe_20220602153141-1-300x181.png 300w, http:\/\/www.recologypower.com:9080\/wp-content\/uploads\/2022\/09\/\u5fae\u4fe1\u622a\u56fe_20220602153141-1-768x464.png 768w, http:\/\/www.recologypower.com:9080\/wp-content\/uploads\/2022\/09\/\u5fae\u4fe1\u622a\u56fe_20220602153141-1-600x362.png 600w\" sizes=\"(max-width: 894px) 100vw, 894px\" \/><figcaption>\u56fe2. \u914d\u7f6e\u5185\u6838\u6253\u5f00EIM\u9a71\u52a8<\/figcaption><\/figure>\n\n\n\n<p>\u5f00\u542f8250\u4e32\u53e3\u9a71\u52a8\uff0c\u4f7f\u7528\u7684\u7aef\u53e3\u6570\u91cf\u7684\u8bdd\u6839\u636e\u81ea\u5df1\u7684\u4f7f\u7528\u4f60\u60c5\u51b5\u8fdb\u884c\u914d\u7f6e\u5373\u53ef\uff0c\u6211\u8fd9\u91cc\u7528\u52308\u4e2a\u6240\u4ee5\u8bbe\u7f6e8\u4e2a\u3002\u8fd8\u6709\u6211\u53d1\u73b0\u4e00\u4e2a\u5947\u602a\u7684\u73b0\u8c61\u5c31\u662f\u8bbe\u7f6e0\u4e2a\u7aef\u53e3register at runtime\u65f6\u5185\u6838\u597d\u50cf\u5c31\u4f1a\u542f\u52a8\u5931\u8d25\uff0c\u63a7\u5236\u53f0\u4ec0\u4e48\u90fd\u4e0d\u8f93\u51fa\u4e86\uff0c\u4e0d\u77e5\u9053\u662f\u4ec0\u4e48\u60c5\u51b5\uff0c\u603b\u4e4b\u8bbe\u7f6e\u65f6\u4e0b\u9762\u90a3\u4e2a\u6570\u5b57\u4e0d\u8981\u8bbe\u7f6e\u4e3a0\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u9a71\u52a8\u90e8\u5206<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;linux\/module.h>\r\n#include &lt;linux\/init.h>\r\n#include &lt;linux\/serial_8250.h>\r\n#include &lt;linux\/platform_device.h>\r\n#include &lt;linux\/kernel.h>\r\n#include &lt;linux\/of_irq.h>\r\n#include &lt;linux\/irq.h>\r\n#include &lt;linux\/of_gpio.h>\r\n#include &lt;linux\/delay.h>\r\n#include &lt;linux\/gpio.h>\r\n\r\n#include &lt;asm\/irq.h>\r\n#include &lt;asm\/mach\/map.h>\r\n#include &lt;asm\/io.h>\r\n\r\n#define ST16C554_REG_SIZE  0x08\r\n\r\n#define IMX_GPIO_NR(bank, nr)\t\t(((bank) - 1) * 32 + (nr))\r\n\r\n#define CS0_BASE    0x50000000\r\n\r\n#define CSA1_BASE    CS0_BASE\r\n#define CSB1_BASE    (CS0_BASE | 1 &lt;&lt; 3)   \/\/A3 A4 A5\u4f5c\u4e3a8\u90091\u6a21\u62df\u5f00\u5173\u9009\u62e9\u7ebf\r\n#define CSC1_BASE    (CS0_BASE | 2 &lt;&lt; 3)   \r\n#define CSD1_BASE    (CS0_BASE | 3 &lt;&lt; 3)   \r\n#define CSA2_BASE    (CS0_BASE | 4 &lt;&lt; 3)   \r\n#define CSB2_BASE    (CS0_BASE | 5 &lt;&lt; 3)   \r\n#define CSC2_BASE    (CS0_BASE | 6 &lt;&lt; 3)  \r\n#define CSD2_BASE    (CS0_BASE | 7 &lt;&lt; 3)\r\n\r\n\/* \u5bc4\u5b58\u5668\u5730\u5740\u504f\u79fb\u5b9a\u4e49 *\/\r\n#define PORT_REG_RHR    0\r\n#define PORT_REG_THR    0\r\n#define PORT_REG_IER    1\r\n#define PORT_REG_ISR    2\r\n#define PORT_REG_FCR    2\r\n#define PORT_REG_LCR    3\r\n#define PORT_REG_MCR    4\r\n#define PORT_REG_LSR    5\r\n#define PORT_REG_MSR    6\r\n#define PORT_REG_SPR    7\r\n#define PORT_REG_DLL    0  \/\/\u6ce2\u7279\u7387\u8bbe\u7f6e\u5bc4\u5b58\u5668\r\n#define PORT_REG_DLM    1\r\n\r\n#define PORT(_base,_irq)\t\t\t\t\\\r\n\t{\t\t\t\t\t\t\\\r\n        .type       = PORT_16550A,  \\\r\n        .iobase     = _base,        \\\r\n        .mapbase    = _base,         \\\r\n\t\t.irq\t\t= _irq,\t\t\t\\\r\n        .irqflags   = IRQF_TRIGGER_RISING,  \\\r\n\t\t.uartclk\t= 1843200,\t\t\\\r\n\t\t.iotype\t\t= UPIO_MEM,\t\t\\\r\n        .regshift   = 0,                \\\r\n\t\t.flags\t\t= UPF_BOOT_AUTOCONF | UPF_IOREMAP,\t\\\r\n\t}\r\n\r\n#define ST16C554_INTA1 gpio_to_irq(IMX_GPIO_NR(3,25))\r\n#define ST16C554_INTB1 gpio_to_irq(IMX_GPIO_NR(3,24))\r\n#define ST16C554_INTC1 gpio_to_irq(IMX_GPIO_NR(3,26))\r\n#define ST16C554_INTD1 gpio_to_irq(IMX_GPIO_NR(3,23))\r\n#define ST16C554_INTA2 gpio_to_irq(IMX_GPIO_NR(3,22))\r\n#define ST16C554_INTB2 gpio_to_irq(IMX_GPIO_NR(3,21))\r\n#define ST16C554_INTC2 gpio_to_irq(IMX_GPIO_NR(3,27))\r\n#define ST16C554_INTD2 gpio_to_irq(IMX_GPIO_NR(3,28))\r\n\r\n\r\nstatic struct plat_serial8250_port exar_data&#91;] = {\r\n\tPORT(CSA1_BASE, 0),\r\n\tPORT(CSB1_BASE, 0),\r\n\tPORT(CSC1_BASE, 0),\r\n\tPORT(CSD1_BASE, 0),\r\n    PORT(CSA2_BASE, 0),\r\n\tPORT(CSB2_BASE, 0),\r\n\tPORT(CSC2_BASE, 0),\r\n\tPORT(CSD2_BASE, 0),\r\n\t{ },\r\n};\r\n\r\nstatic struct platform_device exar_device = {\r\n\t.name\t\t\t= \"serial8250\",\r\n\t\/\/ .id\t\t\t= PLAT8250_DEV_EXAR_ST16C554,\r\n\t.dev\t\t\t= {\r\n\t\t.platform_data\t= exar_data,\r\n\t},\r\n};\r\n\r\nint fsl8250_handle_irq(struct uart_port *port)\r\n{\r\n\tunsigned char lsr, orig_lsr;\r\n\tunsigned long flags;\r\n\tunsigned int iir;\r\n\tstruct uart_8250_port *up = up_to_u8250p(port);\r\n\r\n    \/\/ printk(\"irq = %d \", port->irq);\r\n\r\n\tspin_lock_irqsave(&amp;up->port.lock, flags); \r\n\tiir = port->serial_in(port, PORT_REG_ISR);\r\n\tif (iir &amp; 0x01) {\r\n\t\tspin_unlock_irqrestore(&amp;up->port.lock, flags);\r\n\t\treturn 0;\r\n\t}\r\n    \/* This is the WAR; if last event was BRK, then read and return *\/\r\n\tif (unlikely(up->lsr_saved_flags &amp; 0x10)) {\r\n\t\tup->lsr_saved_flags &amp;= ~0x10;\r\n\t\tport->serial_in(port, PORT_REG_RHR);\r\n\t\tspin_unlock_irqrestore(&amp;up->port.lock, flags);\r\n\t\treturn 1;\r\n\t}\r\n\r\n\tlsr = orig_lsr = up->port.serial_in(&amp;up->port, PORT_REG_LSR);\r\n\tif (lsr &amp; 0x01)\r\n\t\tlsr = serial8250_rx_chars(up, lsr);\r\n\r\n\tserial8250_modem_status(up);\r\n\r\n\tif (lsr &amp; 0x20)\r\n\t\tserial8250_tx_chars(up);\r\n\r\n\tup->lsr_saved_flags = orig_lsr;\r\n\tspin_unlock_irqrestore(&amp;up->port.lock, flags);\r\n\treturn 1;\r\n}\r\n\r\nstatic int __init my_serial_init(void)\r\n{\r\n    int ret;\r\n    int rst_io;\r\n\r\n    exar_data&#91;0].irq = ST16C554_INTA1;\r\n    exar_data&#91;1].irq = ST16C554_INTB1;\r\n    exar_data&#91;2].irq = ST16C554_INTC1;\r\n    exar_data&#91;3].irq = ST16C554_INTD1;\r\n    exar_data&#91;4].irq = ST16C554_INTA2;\r\n    exar_data&#91;5].irq = ST16C554_INTB2;\r\n    exar_data&#91;6].irq = ST16C554_INTC2;\r\n    exar_data&#91;7].irq = ST16C554_INTD2;\r\n\r\n    exar_data&#91;0].handle_irq = fsl8250_handle_irq;\r\n    exar_data&#91;1].handle_irq = fsl8250_handle_irq;\r\n    exar_data&#91;2].handle_irq = fsl8250_handle_irq;\r\n    exar_data&#91;3].handle_irq = fsl8250_handle_irq;\r\n    exar_data&#91;4].handle_irq = fsl8250_handle_irq;\r\n    exar_data&#91;5].handle_irq = fsl8250_handle_irq;\r\n    exar_data&#91;6].handle_irq = fsl8250_handle_irq;\r\n    exar_data&#91;7].handle_irq = fsl8250_handle_irq;\r\n\r\n    rst_io = IMX_GPIO_NR(1,5); \/\/\u83b7\u5f97io\u7f16\u53f7\r\n    ret = gpio_direction_output(rst_io, 0); \/\/\u590d\u4f4d\r\n    ret = gpio_direction_output(rst_io, 1);\r\n    if (ret &lt; 0) {\r\n            printk(\"%s rst_io ouput error\\n\", __func__);\r\n    }\r\n    udelay(10); \/\/\u5ef6\u65f610us\r\n    gpio_set_value(rst_io, 0);\r\n    udelay(1000); \/\/\u5ef6\u65f61000us\r\n\r\n\treturn platform_device_register(&amp;exar_device);\r\n}\r\n\r\nstatic void __exit my_serial_exit(void)\r\n{\r\n    printk(\"unregister st16c554_driver\\n\");\r\n\tplatform_device_unregister(&amp;exar_device);\r\n}\r\n\r\nmodule_init(my_serial_init);\r\nmodule_exit(my_serial_exit);\r\n\r\nMODULE_LICENSE(\"GPL\");\r\nMODULE_AUTHOR(\"ljf\");\r\n<\/code><\/pre>\n\n\n\n<p>PORT\u91cc\u9762\u7684\u53c2\u6570\u6211\u6361\u51e0\u4e2a\u4e3b\u8981\u7684\u8fdb\u884c\u8bf4\u660e\u4e00\u4e0b\uff0cmapbase\u548ciobase\u90fd\u662f\u5b9e\u9645\u7684\u7269\u7406\u5730\u5740\uff0c\u8fd9\u4e2a\u548c\u4f60\u7684EIM\u603b\u7ebf\u914d\u7f6e\u4ee5\u53ca\u786c\u4ef6\u8fde\u63a5\u6709\u5173\u3002irq\u5c31\u662f\u4e2d\u65ad\u53f7\uff0cuartclk\u5c31\u662f\u5916\u63a5\u7684\u65f6\u949f\u9891\u7387\u6211\u63a5\u7684\u662f1.8432M\u7684\u65f6\u949f\u5c31\u8bbe\u7f6e\u4e3a1843200\uff0c\u4e32\u53e3\u7684\u6ce2\u7279\u7387\u6700\u5927\u5c31\u662fclk\/16\uff0ciotype\u8bbe\u7f6e\u4e3aUPIO_MEM\u8868\u793a8\u4f4d\u7684\u5185\u5b58\u5730\u5740\uff0cregshift\u8868\u793a\u5730\u5740\u504f\u79fb\u7531\u4e8e\u6211\u662fA0\u5bf9\u5e94\u7684ST16C554\u7684A0\u6240\u4ee5\u8bbe\u7f6e\u4e3a0\u8868\u793a\u6ca1\u6709\u504f\u79fb\uff0cUPF_IOREMAP\u8868\u793a\u5730\u5740\u9700\u8981\u6620\u5c04\u5230\u865a\u62df\u5730\u5740\u8fdb\u884c\u8bbf\u95ee\u3002<br>\u7136\u540e\u5728init\u51fd\u6570\u4e2d\u7533\u8bf7\u4e2d\u65ad\u53f7\uff0c\u8bbe\u7f6ehandle_irq\uff0c\u8fdb\u884c\u82af\u7247\u590d\u4f4d\uff0c\u6700\u540e\u5c06\u5176\u6ce8\u518c\u6210platform\u8bbe\u5907\u3002\u7136\u540e\u5c31\u4f1a\u548c8250\u9a71\u52a8\u5339\u914d\u4e0a\u8fdb\u884c8250\u9a71\u52a8\u7684\u4e00\u5957\u6d41\u7a0b\uff0c\u8fd9\u91cc\u5c31\u4e0d\u5206\u6790\u4e86\u3002handle_irq\u51fd\u6570\u53ef\u4ee5\u53c2\u80038250_fsl.c\u548c8250_core.c\u6587\u4ef6\uff0c\u91cc\u9762\u90fd\u6709\u76f8\u5e94\u7684\u793a\u4f8b\u3002<br>\u867d\u7136\u9a71\u52a8\u5199\u5b8c\u4e86\u4f46\u662f\u8fd8\u662f\u4e0d\u80fd\u76f4\u63a5\u4f7f\u7528\uff0c\u4f7f\u7528\u4e4b\u524d\u8fd8\u9700\u8981\u5f00\u542fEIM\u7684\u65f6\u949f\uff0c\u867d\u7136\u8bbe\u5907\u6811\u91cc\u9762\u8bbe\u7f6e\u4e86status\u7684\u5c5e\u6027\u4e3aokay\u4f46\u662feim\u7684\u65f6\u949f\u5374\u6ca1\u6709\u88ab\u5f00\u542f\uff0c\u800c\u4e14\u6211\u8bd5\u4e86\u76f4\u63a5\u5728\u4e0a\u9762\u9a71\u52a8\u4e2d\u7684init\u51fd\u6570\u91cc\u8bbe\u7f6eCCM_CCGR6\u5bc4\u5b58\u5668\u7684bit10-11\u4f4d\uff0c\u4f46\u662f\u6ca1\u7528\uff0c\u53ea\u80fd\u5728\u5185\u6838\u521d\u59cb\u5316\u5b8c\u6210\u4e4b\u540e\u518d\u5f00\u542f\u5bf9\u5e94\u7684\u65f6\u949f\u3002\u4e8e\u662f\u6211\u5c31\u53c8\u5199\u4e86\u4e00\u4e2a\u5f00\u542f\u65f6\u949f\u7684\u9a71\u52a8\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\r\nstatic int __init st16c554_cmd_init(void)\r\n{\r\n    void __iomem *ccm_ccgr6 = ioremap(CCM_BASE_ADDR + 0x80, 4);\r\n    unsigned int reg;\r\n\r\n    \/* CLKCTL_CCGR6: Set emi_slow_clock to be on in all modes *\/\r\n    reg = readl(ccm_ccgr6);\r\n    reg |= 0x00000C00;\r\n    writel(reg, ccm_ccgr6);\r\n    reg = readl(ccm_ccgr6);\r\n    iounmap(ccm_ccgr6);\r\n    \r\n    return 0;\r\n}\r\n\r\nstatic void __exit st16c554_cmd_exit(void)\r\n{\r\n}\r\n\r\nmodule_init(st16c554_cmd_init);\r\nmodule_exit(st16c554_cmd_exit);\r\n\r\nMODULE_LICENSE(\"GPL\");\r\n<\/code><\/pre>\n\n\n\n<p>\u00a0\u9a71\u52a8\u91cc\u9762\u76f4\u63a5\u5c31\u662f\u6620\u5c04\u5bc4\u5b58\u5668\u5730\u5740\u7136\u540e\u8bbe\u7f6e\u503c\uff0c\u5176\u4ed6\u7684\u4ec0\u4e48\u90fd\u4e0d\u505a\u3002\u8fd9\u4e2a\u9a71\u52a8\u4f1a\u5728\u6839\u6587\u4ef6\u7cfb\u7edf\u52a0\u8f7d\u4e4b\u540e\u88ab\u8c03\u7528\u81ea\u52a8\u5f00\u542feim\u603b\u7ebf\u7684\u65f6\u949f\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e09\u3001\u9a8c\u8bc1<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1002\" height=\"178\" src=\"http:\/\/www.recologypower.com:9080\/wp-content\/uploads\/2022\/09\/\u5fae\u4fe1\u622a\u56fe_20220602153141-2.png\" alt=\"\" class=\"wp-image-972\" srcset=\"http:\/\/www.recologypower.com:9080\/wp-content\/uploads\/2022\/09\/\u5fae\u4fe1\u622a\u56fe_20220602153141-2.png 1002w, http:\/\/www.recologypower.com:9080\/wp-content\/uploads\/2022\/09\/\u5fae\u4fe1\u622a\u56fe_20220602153141-2-300x53.png 300w, http:\/\/www.recologypower.com:9080\/wp-content\/uploads\/2022\/09\/\u5fae\u4fe1\u622a\u56fe_20220602153141-2-768x136.png 768w, http:\/\/www.recologypower.com:9080\/wp-content\/uploads\/2022\/09\/\u5fae\u4fe1\u622a\u56fe_20220602153141-2-600x107.png 600w\" sizes=\"(max-width: 1002px) 100vw, 1002px\" \/><\/figure>\n\n\n\n<p>\u00a0\u5c06\u9a71\u52a8\u7f16\u8bd1\u8fdb\u5185\u6838\u91cc\u9762\uff0c\u7528\u65b0\u7684\u5185\u6838\u8fdb\u884c\u542f\u52a8\u5982\u679c\u9a71\u52a8\u52a0\u8f7d\u6210\u529f\u4e4b\u540e\u5185\u6838\u542f\u52a8\u5c31\u4f1a\u6253\u5370\u51fa\u76f8\u5e94\u7684\u4fe1\u606f\u6765\uff0c\u5982\u4e0a\u56fe\u6240\u793a\u3002\u67e5\u770b\/dev\u76ee\u5f55\u53ef\u4ee5\u770b\u5230\u5df2\u7ecf\u6709ttyS0-7\u8fd9\u51e0\u4e2a\u8bbe\u5907\u8282\u70b9\u4e86\u3002<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"slide-text-bg2\">\n<h3>\u524d\u8a00 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u6700\u8fd1\u505a\u4e86\u4e00\u4e2a\u9879\u76ee\u4f7f\u7528<\/h3>\n<\/div>\n<div class=\"flex-btn-div\"><a href=\"http:\/\/www.recologypower.com:9080\/?p=969\" class=\"btn1 flex-btn\">\u9605\u8bfb\u66f4\u591a<\/a><\/div>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[121],"tags":[],"_links":{"self":[{"href":"http:\/\/www.recologypower.com:9080\/index.php?rest_route=\/wp\/v2\/posts\/969"}],"collection":[{"href":"http:\/\/www.recologypower.com:9080\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.recologypower.com:9080\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.recologypower.com:9080\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.recologypower.com:9080\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=969"}],"version-history":[{"count":1,"href":"http:\/\/www.recologypower.com:9080\/index.php?rest_route=\/wp\/v2\/posts\/969\/revisions"}],"predecessor-version":[{"id":973,"href":"http:\/\/www.recologypower.com:9080\/index.php?rest_route=\/wp\/v2\/posts\/969\/revisions\/973"}],"wp:attachment":[{"href":"http:\/\/www.recologypower.com:9080\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=969"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.recologypower.com:9080\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=969"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.recologypower.com:9080\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=969"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}