samd51: add support for DAC1
Этот коммит содержится в:
		
							родитель
							
								
									610e7fd16a
								
							
						
					
					
						коммит
						740134197e
					
				
					 1 изменённых файлов: 42 добавлений и 19 удалений
				
			
		|  | @ -1988,10 +1988,12 @@ func EnterBootloader() { | ||||||
| 
 | 
 | ||||||
| // DAC on the SAMD51. | // DAC on the SAMD51. | ||||||
| type DAC struct { | type DAC struct { | ||||||
|  | 	Channel uint8 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| var ( | var ( | ||||||
| 	DAC0 = DAC{} | 	DAC0 = DAC{Channel: 0} | ||||||
|  | 	DAC1 = DAC{Channel: 1} | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // DACConfig placeholder for future expansion. | // DACConfig placeholder for future expansion. | ||||||
|  | @ -2004,6 +2006,7 @@ func (dac DAC) Configure(config DACConfig) { | ||||||
| 	// Turn on clock for DAC | 	// Turn on clock for DAC | ||||||
| 	sam.MCLK.APBDMASK.SetBits(sam.MCLK_APBDMASK_DAC_) | 	sam.MCLK.APBDMASK.SetBits(sam.MCLK_APBDMASK_DAC_) | ||||||
| 
 | 
 | ||||||
|  | 	if !sam.GCLK.PCHCTRL[42].HasBits(sam.GCLK_PCHCTRL_CHEN) { | ||||||
| 		// Use Generic Clock Generator 4 as source for DAC. | 		// Use Generic Clock Generator 4 as source for DAC. | ||||||
| 		sam.GCLK.PCHCTRL[42].Set((sam.GCLK_PCHCTRL_GEN_GCLK4 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) | 		sam.GCLK.PCHCTRL[42].Set((sam.GCLK_PCHCTRL_GEN_GCLK4 << sam.GCLK_PCHCTRL_GEN_Pos) | sam.GCLK_PCHCTRL_CHEN) | ||||||
| 		for sam.GCLK.SYNCBUSY.HasBits(sam.GCLK_SYNCBUSY_GENCTRL_GCLK4 << sam.GCLK_SYNCBUSY_GENCTRL_Pos) { | 		for sam.GCLK.SYNCBUSY.HasBits(sam.GCLK_SYNCBUSY_GENCTRL_GCLK4 << sam.GCLK_SYNCBUSY_GENCTRL_Pos) { | ||||||
|  | @ -2017,31 +2020,51 @@ func (dac DAC) Configure(config DACConfig) { | ||||||
| 		} | 		} | ||||||
| 		for sam.DAC.SYNCBUSY.HasBits(sam.DAC_SYNCBUSY_SWRST) { | 		for sam.DAC.SYNCBUSY.HasBits(sam.DAC_SYNCBUSY_SWRST) { | ||||||
| 		} | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	sam.DAC.CTRLA.ClearBits(sam.DAC_CTRLA_ENABLE) | ||||||
|  | 	for sam.DAC.SYNCBUSY.HasBits(sam.DAC_SYNCBUSY_ENABLE) { | ||||||
|  | 	} | ||||||
| 
 | 
 | ||||||
| 	// enable | 	// enable | ||||||
| 	sam.DAC.CTRLB.Set(sam.DAC_CTRLB_REFSEL_VREFPU << sam.DAC_CTRLB_REFSEL_Pos) | 	sam.DAC.CTRLB.Set(sam.DAC_CTRLB_REFSEL_VREFPU << sam.DAC_CTRLB_REFSEL_Pos) | ||||||
| 	sam.DAC.DACCTRL[0].SetBits((sam.DAC_DACCTRL_CCTRL_CC12M << sam.DAC_DACCTRL_CCTRL_Pos) | sam.DAC_DACCTRL_ENABLE) | 	sam.DAC.DACCTRL[dac.Channel].SetBits((sam.DAC_DACCTRL_CCTRL_CC12M << sam.DAC_DACCTRL_CCTRL_Pos) | sam.DAC_DACCTRL_ENABLE) | ||||||
| 	sam.DAC.CTRLA.Set(sam.DAC_CTRLA_ENABLE) | 	sam.DAC.CTRLA.Set(sam.DAC_CTRLA_ENABLE) | ||||||
| 
 | 
 | ||||||
| 	for sam.DAC.SYNCBUSY.HasBits(sam.DAC_SYNCBUSY_ENABLE) { | 	for sam.DAC.SYNCBUSY.HasBits(sam.DAC_SYNCBUSY_ENABLE) { | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	switch dac.Channel { | ||||||
|  | 	case 0: | ||||||
| 		for !sam.DAC.STATUS.HasBits(sam.DAC_STATUS_READY0) { | 		for !sam.DAC.STATUS.HasBits(sam.DAC_STATUS_READY0) { | ||||||
| 		} | 		} | ||||||
|  | 	default: | ||||||
|  | 		for !sam.DAC.STATUS.HasBits(sam.DAC_STATUS_READY1) { | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Set writes a single 16-bit value to the DAC. | // Set writes a single 16-bit value to the DAC. | ||||||
| // Since the ATSAMD51 only has a 12-bit DAC, the passed-in value will be scaled down. | // Since the ATSAMD51 only has a 12-bit DAC, the passed-in value will be scaled down. | ||||||
| func (dac DAC) Set(value uint16) error { | func (dac DAC) Set(value uint16) error { | ||||||
| 	sam.DAC.DATA[0].Set(value >> 4) | 	sam.DAC.DATA[dac.Channel].Set(value >> 4) | ||||||
| 	syncDAC() | 	dac.syncDAC() | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func syncDAC() { | func (dac DAC) syncDAC() { | ||||||
|  | 	switch dac.Channel { | ||||||
|  | 	case 0: | ||||||
| 		for !sam.DAC.STATUS.HasBits(sam.DAC_STATUS_EOC0) { | 		for !sam.DAC.STATUS.HasBits(sam.DAC_STATUS_EOC0) { | ||||||
| 		} | 		} | ||||||
| 		for sam.DAC.SYNCBUSY.HasBits(sam.DAC_SYNCBUSY_DATA0) { | 		for sam.DAC.SYNCBUSY.HasBits(sam.DAC_SYNCBUSY_DATA0) { | ||||||
| 		} | 		} | ||||||
|  | 	default: | ||||||
|  | 		for !sam.DAC.STATUS.HasBits(sam.DAC_STATUS_EOC1) { | ||||||
|  | 		} | ||||||
|  | 		for sam.DAC.SYNCBUSY.HasBits(sam.DAC_SYNCBUSY_DATA1) { | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| var rngInitDone = false | var rngInitDone = false | ||||||
|  |  | ||||||
		Загрузка…
	
	Создание таблицы
		
		Сослаться в новой задаче
	
	 sago35
						sago35