atsamd51 atsame5x: change to allow specifying the ADC Bus number

This commit is contained in:
sago35
2021-05-10 11:14:19 +09:00
parent 9f5066aa6f
commit 008dd7dfe6
4 changed files with 37 additions and 3 deletions
+1 -1
View File
@@ -14,7 +14,7 @@ func main() {
led := machine.LED
led.Configure(machine.PinConfig{Mode: machine.PinOutput})
sensor := machine.ADC{machine.ADC2}
sensor := machine.ADC{Pin: machine.ADC2}
sensor.Configure(machine.ADCConfig{})
for {
+7
View File
@@ -9,4 +9,11 @@ type ADCConfig struct {
Reference uint32 // analog reference voltage (AREF) in millivolts
Resolution uint32 // number of bits for a single conversion (e.g., 8, 10, 12)
Samples uint32 // number of samples for a single conversion (e.g., 4, 8, 16, 32)
Bus uint8 // bus Number of ADC
}
const (
AdcBusAuto = 0
AdcBus0 = 1
AdcBus1 = 2
)
+1
View File
@@ -44,4 +44,5 @@ func (p Pin) Low() {
type ADC struct {
Pin Pin
Bus uint8
}
+28 -2
View File
@@ -813,6 +813,18 @@ func (a ADC) Configure(config ADCConfig) {
}
a.Pin.Configure(PinConfig{Mode: PinAnalog})
switch config.Bus {
case AdcBusAuto:
bus := a.getADCBus()
if bus == sam.ADC0 {
a.Bus = 0
} else {
a.Bus = 1
}
default:
a.Bus = config.Bus
}
}
// Get returns the current value of a ADC pin, in the range 0..0xffff.
@@ -876,6 +888,12 @@ func (a ADC) Get() uint16 {
}
func (a ADC) getADCBus() *sam.ADC_Type {
if a.Bus == AdcBus0 {
return sam.ADC0
} else if a.Bus == AdcBus1 {
return sam.ADC1
}
if (a.Pin >= PB04 && a.Pin <= PB07) || (a.Pin >= PC00) {
return sam.ADC1
}
@@ -887,9 +905,17 @@ func (a ADC) getADCChannel() uint8 {
case PA02:
return 0
case PB08:
return 2
if a.Bus == AdcBus1 {
return 0
} else {
return 2
}
case PB09:
return 3
if a.Bus == AdcBus1 {
return 1
} else {
return 3
}
case PA04:
return 4
case PA05: