Creative SB0350 Hardware Programming Guide - Page 85

Creative SB0350 Manual

Page 85 highlights

5-10 MIDI Port I/O Programming Sending MIDI Data Once in UART mode, MIDI data can be sent to an external MIDI device by writing to the Data port. Example code: mov inc Busy: in test jnz mov dec out al,dx al,40h Busy al,bMidiData dx dx,al ;Read status port ;Ready for output? ;No ;Get MIDI data ;Data Port ;Output MIDI data dx,wMpuBaseAddx dx ;MPU-401 base I/O address ;Status port Reading MIDI Data When MIDI data is available from an external MIDI device, it can be read in from the Data port. There are two modes used in detecting the availability of input data: polling and interrupt. When in polling mode, as before, input data is available when bit 7 of the Status port is zero. Conversely, when bit 7 is a one, no MIDI data is available. In interrupt mode, an interrupt occurs when a MIDI code is ready. An interrupt service routine has to be set up to retrieve the MIDI code. Reading from the Data port will clear the interrupt signal. The sequence for reading MIDI data is identical in both polling and interrupt modes. Below is a code fragment that can be used in either the polling routine or the interrupt service routine: mov inc Busy: in test jnz dec in al,dx al,80h Busy dx al,dx ;Read status port ;MIDI data available? ;No ;Data port ;Read MIDI data, and clear interrupt dx,wMpuBaseAddx dx ;MPU-401 base I/O address ;Status port Under the MPU-401 UART mode, there is no timing information available. It is up to the application to handle the timing for the MIDI data.

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141

5-10
MIDI Port I/O Programming
Sending MIDI Data
Once in UART mode, MIDI data can be sent to an external MIDI device by writing to
the Data port.
Example code:
mov
dx,wMpuBaseAddx
;MPU-401 base I/O address
inc
dx
;Status port
Busy:
in
al,dx
;Read status port
test
al,40h
;Ready for output?
jnz
Busy
;No
mov
al,bMidiData
;Get MIDI data
dec
dx
;Data Port
out
dx,al
;Output MIDI data
Reading MIDI Data
When MIDI data is available from an external MIDI device, it can be read in from the
Data port.
There are two modes used in detecting the availability of input data: polling
and interrupt.
When in polling mode, as before, input data is available when bit 7 of the Status port is
zero.
Conversely, when bit 7 is a one, no MIDI data is available.
In interrupt mode, an interrupt occurs when a MIDI code is ready.
An interrupt service
routine has to be set up to retrieve the MIDI code.
Reading from the Data port will
clear the interrupt signal.
The sequence for reading MIDI data is identical in both polling and interrupt modes.
Below is a code fragment that can be used in either the polling routine or the interrupt
service routine:
mov
dx,wMpuBaseAddx
;MPU-401 base I/O address
inc
dx
;Status port
Busy:
in
al,dx
;Read status port
test
al,80h
;MIDI data available?
jnz
Busy
;No
dec
dx
;Data port
in
al,dx
;Read MIDI data, and clear interrupt
Under the MPU-401 UART mode, there is no timing information available.
It is up to
the application to handle the timing for the MIDI data.