3841|1

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

【请前辈们指点】初学ARM11,自己在OK6410上写了一个LED程序,但有几个地方不太明白 [复制链接]

OK6410使用VB.NET控制ARM11开发板LED程序
我是一个从单片机思想转变到ARM上来的,一开始很不习惯使用ARM的开发方式,主要是自己对嵌入式的架构理解起来不那么快,受单片机开发影响,P0=0;即可点亮LED灯的影响,一直没太搞懂arm上LED驱动是怎么回事,总想拿VB.NET写个程序能控制板子上的小灯。借鉴了一下别人的成果,写了这个小程序,希望对像我这样在门口的朋友有个指导意义。另有几个概念我梳理下,希望高手指点一下我的思路是否正确。
1. 对于跑WINCE系统的arm板原则上不允许客户的C程序直接访问物理地址或者虚拟地址
2. 对于用于的C程序想访问设备的话,系统里面必须要有驱动,驱动应该作为内核级程序运行的
3. 想点亮LED时应用程序必须通过方法去掉系统api,然后由系统对应去打开驱动,再利用驱动里的方法对应去操作寄存器
4. 送数取数
5. 为什么这个程序既能跑在wince下又能跑在X86下呢?  请高手指点

Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Text
Imports System.Drawing
Imports System.Runtime.InteropServices
Public Class Form1
    Const OPEN_EXISTING = 3
    Const GENERIC_READ = &H80000000
    Const GENERIC_WRITE = &H40000000
    Const INVALID_HANDLE_VALUE = -1

    Const LED_1_ON = &H4001060
    Const LED_2_ON = &H4001070
    Const LED_3_ON = &H4001080
    Const LED_4_ON = &H4001090

    Const LED_1_OFF = &H4001061
    Const LED_2_OFF = &H4001071
    Const LED_3_OFF = &H4001081
    Const LED_4_OFF = &H4001091

    Private hPort As IntPtr
    Declare Function CreateFile Lib "coredll.dll" Alias "CreateFile" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As IntPtr, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As IntPtr) As IntPtr
    Declare Function DeviceIoControl Lib "coredll.dll" Alias "DeviceIoControl" (ByVal hDevice As System.IntPtr, ByVal dwIoControlCode As Long, ByVal lpInBuffer() As Byte, ByVal nInBufferSize As Long, ByVal lpOutBuffer() As Byte, ByVal nOutBufferSize As Long, ByVal lpBytesReturned As Long, ByVal lpOverlapped As System.IntPtr) As Boolean

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
            hPort = CreateFile("LED1:", GENERIC_READ Or GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero)
            Dim led1() As Byte = {0}
            Dim pout(10) As Byte
            DeviceIoControl(hPort, LED_1_ON, led1, 0, pout, 0, 0, IntPtr.Zero)     '在这里修改LED_1_ON就可以对所有的LED进行操作
        Catch ex As Exception
            MsgBox("操作LED失败")
        End Try
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Try
            hPort = CreateFile("LED1:", GENERIC_READ Or GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero)
            Dim led1() As Byte = {0}
            Dim pout(10) As Byte
            DeviceIoControl(hPort, LED_1_OFF, led1, 0, pout, 0, 0, IntPtr.Zero)
        Catch ex As Exception
            MsgBox("操作LED失败")
        End Try
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Try
            hPort = CreateFile("LED1:", GENERIC_READ Or GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero)
            Dim led1() As Byte = {0}
            Dim pout(10) As Byte
            DeviceIoControl(hPort, LED_2_OFF, led1, 0, pout, 0, 0, IntPtr.Zero)
        Catch ex As Exception
            MsgBox("操作LED失败")
        End Try
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Try
            hPort = CreateFile("LED1:", GENERIC_READ Or GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero)
            Dim led1() As Byte = {0}
            Dim pout(10) As Byte
            DeviceIoControl(hPort, LED_3_OFF, led1, 0, pout, 0, 0, IntPtr.Zero)
        Catch ex As Exception
            MsgBox("操作LED失败")
        End Try
    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        Try
            hPort = CreateFile("LED1:", GENERIC_READ Or GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero)
            Dim led1() As Byte = {0}
            Dim pout(10) As Byte
            DeviceIoControl(hPort, LED_4_OFF, led1, 0, pout, 0, 0, IntPtr.Zero)
        Catch ex As Exception
            MsgBox("操作LED失败")
        End Try
    End Sub

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        Try
            hPort = CreateFile("LED1:", GENERIC_READ Or GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero)
            Dim led1() As Byte = {0}
            Dim pout(10) As Byte
            DeviceIoControl(hPort, LED_2_ON, led1, 0, pout, 0, 0, IntPtr.Zero)     '在这里修改LED_1_ON就可以对所有的LED进行操作
        Catch ex As Exception
            MsgBox("操作LED失败")
        End Try
    End Sub

    Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
        Try
            hPort = CreateFile("LED1:", GENERIC_READ Or GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero)
            Dim led1() As Byte = {0}
            Dim pout(10) As Byte
            DeviceIoControl(hPort, LED_3_ON, led1, 0, pout, 0, 0, IntPtr.Zero)     '在这里修改LED_1_ON就可以对所有的LED进行操作
        Catch ex As Exception
            MsgBox("操作LED失败")
        End Try
    End Sub

    Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
        Try
            hPort = CreateFile("LED1:", GENERIC_READ Or GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero)
            Dim led1() As Byte = {0}
            Dim pout(10) As Byte
            DeviceIoControl(hPort, LED_4_ON, led1, 0, pout, 0, 0, IntPtr.Zero)     '在这里修改LED_1_ON就可以对所有的LED进行操作
        Catch ex As Exception
            MsgBox("操作LED失败")
        End Try
    End Sub
End Class
此帖出自ARM技术论坛

最新回复

VB, 对于我来说,简直是天书...  详情 回复 发表于 2011-7-26 23:21
点赞 关注
 

回复
举报

4

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
VB, 对于我来说,简直是天书...
此帖出自ARM技术论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表