历史上的今天
返回首页

历史上的今天

今天是:2025年01月06日(星期一)

正在发生

2020年01月06日 | ARM Memory Copy

2020-01-06 来源:eefocus

  1         MODULE  ARM_MEMORY

  2 

  3         PUBLIC  ARM_MEMCPY

  4         PUBLIC  ARM_MEMSET

  5         PUBLIC  ARM_MEMSET8

  6         PUBLIC  ARM_MEMSET16

  7         PUBLIC  ARM_MEMSET32

  8 

  9         SECTION .text:CODE:NOROOT(2)

 10         CODE32

 11 

 12 ;-------------------------------------------------------------------------------

 13 ; void ARM_MEMCPY(void* pDest, void* pSrc, U32 NumBytes)

 14 ;

 15 ; Function description

 16 ;   Copy data in memory from source address to destination address.

 17 ;

 18 ; Register usage:

 19 ;

 20 ;   R0    pDest

 21 ;   R1    pSrc

 22 ;   R2    NumBytes

 23 ;

 24 ;   R3    Used for data transfers

 25 ;   R4    Used for data transfers

 26 ;   R12   Used for data transfers

 27 ;   R14   Used for data transfers

 28 ;

 29 ;   R13   SP

 30 ;   R14   LR (contains return address)

 31 ;   R15   PC

 32 ;

 33 ;-------------------------------------------------------------------------------

 34 ARM_MEMCPY:

 35 ;-------------------------------------------------------------------------------

 36         cmp         R2, #+3                           ; R2 = NumBytes

 37         bls         ARM_MEMCPY_HandleTrailingBytes    ; If we have less than one complete word, use single byte transfer

 38 

 39         ands        R12, R0, #+3                      ; R0 = destination address

 40         beq         ARM_MEMCPY_DestIsDWordAligned     ; Is destination address already word aligned ?

 41 

 42 ;-------------------------------------------------------------------------------

 43 ; Handle as much bytes as necessary to align destination address

 44 ;

 45         ldrb        R3, [R1], #+1                     ; We need at least one byte to the next word alignment, so we read one.

 46         cmp         R12, #+2                          ; Set condition codes according to the mis-alignment

 47         add         R2, R2, R12                       ; Adjust NumBytes : 1, 2, 3

 48         ldrbls      R12, [R1], #+1                    ; Lower or same (LS)? -> We need one or two bytes to the next word aligned address

 49         strb        R3, [R0], #+1

 50         ldrbcc      R3, [R1], #+1                     ; Carry clear (CC)? -> We need one more byte

 51         strbls      R12, [R0], #+1

 52         sub         R2, R2, #+4                       ; Adjust NumBytes

 53         strbcc      R3, [R0], #+1                     ; now destination address already is word aligned

 54 

 55 ;-------------------------------------------------------------------------------

 56 ; Choose best way to transfer data

 57 ;

 58 ARM_MEMCPY_DestIsDWordAligned:

 59         ands        R3, R1, #+3

 60         beq         ARM_MEMCPY_HandleBulkWordData     ; If source and destination are aligned, use bulk word transfer

 61 

 62         subs        R2, R2, #+4

 63         bcc         ARM_MEMCPY_HandleTrailingBytes    ; If we have less than one complete word left, use single byte transfer

 64 

 65         ldr         R12, [R1, -R3]!                   ; Read first mis-aligned data word and word align source address

 66         cmp         R3, #+2

 67         beq         ARM_MEMCPY_Loop16BitShift

 68 

 69         bhi         ARM_MEMCPY_Loop24BitShift

 70 

 71 ;-------------------------------------------------------------------------------

 72 ; Handle data in units of word

 73 ;

 74 ; This is done by reading mis-aligned words from source address and

 75 ; shift them into the right alignment. After this the next data word

 76 ; will be read to complete the missing data part.

 77 ;

 78 ARM_MEMCPY_Loop8BitShift:

 79         mov         R3, R12, LSR #+8           ; Shift data word into right position

 80         ldr         R12, [R1, #+4]!            ; Load next mis-aligned data word

 81         subs        R2, R2, #+4                ; Decrement NumBytes

 82         orr         R3, R3, R12, LSL #+24      ; Combine missing part of data to build full data word

 83         str         R3, [R0], #+4              ; Store complete word

 84         bcs         ARM_MEMCPY_Loop8BitShift

 85 

 86         add         R1, R1, #+1                ; Adjust source address

 87         b           ARM_MEMCPY_HandleTrailingBytes         ; Handle trailing bytes

 88 

 89 ARM_MEMCPY_Loop16BitShift:

 90         mov         R3, R12, LSR #+16          ; Shift data word into right position

 91         ldr         R12, [R1, #+4]!            ; Load next mis-aligned data word

 92         subs        R2, R2, #+4                ; Decrement NumBytes

 93         orr         R3, R3, R12, LSL #+16      ; Combine missing part of data to build full data word

 94         str         R3, [R0], #+4              ; Store complete word

 95         bcs         ARM_MEMCPY_Loop16BitShift

 96 

 97         add         R1, R1, #+2                ; Adjust source address

 98         b           ARM_MEMCPY_HandleTrailingBytes         ; Handle trailing bytes

 99 

100 ARM_MEMCPY_Loop24BitShift:

101         mov         R3, R12, LSR #+24          ; Shift data word into right position

102         ldr         R12, [R1, #+4]!            ; Load next mis-aligned data word

103         subs        R2, R2, #+4                ; Decrement NumBytes

104         orr         R3, R3, R12, LSL #+8       ; Combine missing part of data to build full data word

105         str         R3, [R0], #+4              ; Store complete word

106         bcs         ARM_MEMCPY_Loop24BitShift

107 

108         add         R1, R1, #+3                ; Adjust source address

109         b           ARM_MEMCPY_HandleTrailingBytes         ; Handle trailing bytes

110 

111 ;-------------------------------------------------------------------------------

推荐阅读

史海拾趣

ERNI公司的发展小趣事

近年来,ERNI不断加大研发投入,致力于推出更多创新产品和技术。他们不仅继续深耕连接器领域,还拓展了背板、子系统及整套电机架系统等业务。同时,ERNI还积极为客户提供高性能、自行设计的工具制造、现代器件装配和测试设备等高附加值的服务。这些举措使ERNI在电子行业中的竞争力不断增强,也为公司的未来发展奠定了坚实基础。

以上是关于电子行业里ERNI公司发展起来的相关故事概述。通过这些故事,我们可以看到ERNI如何凭借持续的创新、精湛的技术和全球化的战略在电子行业中取得了辉煌成就。

China Semiconductor Corp公司的发展小趣事

随着公司的发展,CSC逐渐意识到技术创新是立足之本。于是,公司加大了研发投入,引进了一批高端人才,建立了完善的研发体系。通过不懈的努力,CSC在多个领域取得了重大突破,如高性能处理器、存储器等关键技术的研发,使公司在国际市场上逐渐获得了话语权。

Cosel公司的发展小趣事

在市场竞争日益激烈的情况下,品牌形象的塑造对于企业的发展至关重要。1992年,公司名称变更为COSEL株式会社,这一变革不仅提升了公司的品牌形象,也展示了公司向更高目标迈进的决心。同时,公司还导入了V.I(视觉整合),通过统一的视觉形象传达公司的品牌理念和价值观。这些举措使得Cosel公司在客户心中留下了深刻的印象。

超霸(GP)公司的发展小趣事

2013年,绿索超容在南京江宁区智能电网产业园正式成立。公司自创立之初,就明确了“制造中国可靠性最高的超级电容”的目标,以及“引领超容行业,做绿色能源模范”的使命。这一清晰的发展定位,为绿索超容后续的技术创新和市场拓展奠定了坚实的基础。公司初期虽然面临资金和技术挑战,但通过不懈努力,逐步建立了自己的研发团队和生产体系。

HSMC公司的发展小趣事

HSMC深知技术创新是企业发展的核心驱动力。公司不仅拥有丰富的14纳米及7纳米以下节点FinFET先进逻辑工艺与晶圆级先进封装技术经验,还持续投入研发,瞄准世界先进的制程工艺。通过与全球各大科研院所的合作,HSMC不断储备行业专利,增强自身的技术壁垒。这种对技术创新的执着追求,为公司的长远发展奠定了坚实基础。

福声科技(FUET)公司的发展小趣事

在竞争日益激烈的电子行业中,福声科技始终坚持客户需求导向,提供定制化服务。公司深入了解客户的实际需求和应用场景,为客户提供从产品设计、生产到售后服务的全方位解决方案。这种以客户为中心的服务理念不仅增强了客户的满意度和忠诚度,还为公司赢得了更多的业务机会和市场份额。同时,福声科技还不断优化生产流程和服务流程,提高响应速度和交付能力,以满足客户日益增长的需求。

以上五个故事展示了福声科技(FUET)在电子行业中逐渐发展起来的历程,体现了公司在技术创新、质量管理、市场拓展和客户服务等方面的努力和成就。

问答坊 | AI 解惑

电源技术对电子变压器的要求

电源技术对电子变压器的要求,像所有作为商品的产品一样,是在具体使用条件下完成具体的功能中追求性能价格比最好。有时可能偏重价格和成本,有时可能偏重效率和性能。现在,轻、薄、短、小成为电子变压器的发展方向,是强调降低成本。从总的要求出 ...…

查看全部问答>

wince 驱动工程师真的要自己编驱动吗 还是移植的多

wince 驱动工程师真的要自己编驱动吗  还是移植的多…

查看全部问答>

关于89c51中断不响应的问题

菜鸟才接触89c51,写的如下代码,但是中断不响应,我在INT0输入的是方波信号,还有这块是16位寻址哈 也就是unsigned int 型最大值是65536哈,我想是让int0为高电平时,计数器开始计数,当int0下一个高电平到来 之后计数器重新计数,一直这样循环 ...…

查看全部问答>

力科发布业界最全面的MIPI测试解决方案

力科发布业界最全面的MIPI测试解决方案…

查看全部问答>

招聘嵌入式开发工程师---上海

招聘要求: 岗位:嵌入式设计工程师 1,  统招大学本科电子,仪器仪表,机电,电信等相关专业 2,  熟悉8位,32位单片机系统软硬件设计 3,  熟悉模拟,数字电路及各种工具软件使用 4,  具有团队精神,具备良好的学习能 ...…

查看全部问答>

发现函数被多次调用!!!急

我用的单片机是F149,在程序中发现有只用一次的屏幕显示函数被调用多次,请大家给分析一下,我自己认为是TimerA引起的。 我的这段程序是单片机C语言,在运行时发现屏幕显示函数被多次调用,实际我只用了一次。大家给点意思看看是哪里的问题。我自 ...…

查看全部问答>

请教关于UC2843或者UC3843的占空比的计算的问题

下面这个框图是UC2843芯片的内部框图,现在想请教的是反馈电压、反馈电流和输出占空比的计算公式,手册上都没有介绍这个计算关系到底是什么样子的。谢谢!…

查看全部问答>

基于TLC2543的多路数据采集系统

本设计要求作出一种多路模拟信号采集模块,从多个通道轮流采集数据一次,并将数据保存于记录。本系统采用AT89C52作为控制系统,核心器件采用TI公司的高精度12BIT ,11通道一步采样AD芯片TLC2543。分别从11路采样模拟信号,实现11路数据采集。为了做 ...…

查看全部问答>

晒WEBENCH设计的过程+Arria系列10AT090电源驱动电路设计

需求:输入,14到22V         输出: # Name VLoad ILoad Description 1. LOAD #1 3.3 V 0.5 A VoutRipple=10% 2. LOAD #2 5 V 0.5 A VoutRipple=10% 3. VCC 0.9 V 41.304 A VoutRipple=10% 4. VCCA_PLL 1.8 V ...…

查看全部问答>

【瑞萨R7F0C80212试用】一步一步玩R7F0C80212之第二弹 上电初实验

      根据第一弹的描述,相信大家对于板子的所有套件以及板子的布局已经了如指掌了,既然已经开始拿到板子了,我们就开始来上电试试有什么效果吧。。              开发板 ...…

查看全部问答>