spi = Spi() gen.handleExports(spi) for i in [1, 2]: pdir = [] pname = "P"+str(i) for bit, direction, name in p.parse()[1:]: bname = "BIT"+str(bit) if direction in ["OUT", "IN/OUT"]: c << OMacro("set_"+name, pname+"OUT |= "+bname) c << OMacro("clr_"+name, pname+"OUT &= ~"+bname) c << OMacro("toggle_"+name, pname+"OUT ^= "+bname) pdir.append(bname) c.add(name, pname+"OUT |= "+bname, pname+"OUT &= ~"+bname) #sc << OMacro("set_"+name, "bit_set(\""+name+"\")") #sc << OMacro("clr_"+name, "bit_clr(\""+name+"\")") #sc << OMacro("toggle_"+name, "bit_toggle(\""+name+"\")") if direction in ["IN", "IN/OUT"]: c.add_in(name, "((" + pname + "IN & " + bname + ") == " + bname + ")") c.sm.add("PIN_"+name, [pname + "DIR &= ~" + bname + ";", "if (out)", "{", pname + "DIR |= " + bname + ";", "}"]) if direction in ["IN/OUT"]:
c.m << "ioInit.GPIO_Mode = GPIO_Mode_AF;" #c.m << "ioInit.GPIO_OType = GPIO_OType_PP;" #c.m << "ioInit.GPIO_PuPd = GPIO_PuPd_DOWN;" c.m << "ioInit.GPIO_Speed = GPIO_Speed_10MHz;" c.m << "GPIO_Init(GPIO"+i+", &ioInit);" c.m << "" for item, af in paf: psource = "GPIO_PinSource"+item[len("GPIO_Pin_"):] c.m << "GPIO_PinAFConfig(GPIO"+i+", "+psource+", "+af+");" pinId = 1 for direction, desc, port, bit in pins: name = "PIN_"+desc c.add(desc, "GPIO"+port+"->BSRR = GPIO_Pin_"+bit, "GPIO"+port+"->BRR = GPIO_Pin_"+bit) if direction == "IN/OUT": c.sm.add(name, ["GPIO"+port+"->MODER &= ~(((uint32_t)0x3) << ("+bit+"*2));", "if (out)", "{", "GPIO"+port+"->MODER |= (((uint32_t)0x1) << ("+bit+"*2));", "}"]) if direction in ["IN", "IN/OUT"]: c.add_in(desc, "((GPIO"+port+"->IDR & GPIO_Pin_"+bit+") == GPIO_Pin_"+bit+")") pinId += 1 write_file_n(PATH+"config", c, spi)
c.m << "" c.m << "ioInit.Pin = " + (" | ".join(afpins)) + ";" c.m << "ioInit.Mode = GPIO_MODE_AF_PP;" c.m << "ioInit.Speed = GPIO_SPEED_FREQ_MEDIUM;" c.m << "ioInit.Alternate = " + paf[0].af + ";" c.m << "HAL_GPIO_Init(GPIO"+paf[0].port+", &ioInit);" c.m << "" # for pd in paf: # c.m << "GPIO_PinAFConfig(GPIO"+pd.port+", GPIO_PinSource"+pd.pin+", "+pd.af+");" pinId = 1 for pd in pins: name = "PIN_"+pd.desc c.add(pd.desc, pd.reg('BSRR')+"= "+pd.pin_name(), pd.reg('BRR')+" = "+pd.pin_name()) if pd.direction == "IN/OUT": c.sm.add(name, [pd.reg('MODER')+" &= ~(((uint32_t)0x3) << ("+pd.pin+"*2));", "if (out)", "{", pd.reg('MODER')+" |= (((uint32_t)0x1) << ("+pd.pin+"*2));", "}"]) if pd.direction in ["IN", "IN/OUT"]: c.add_in(pd.desc, "(("+pd.reg('IDR')+" & "+pd.pin_name()+") == "+pd.pin_name()+")") pinId += 1 write_file_n(p.vars['PATH']+"hal", c, spi)