you need to use a real button element to tell the screen reader where to click. Either a button element, or span or "a" with role="button". If span is used, then you also must add tabindex="0" to make it keyboard focusable.
Add an aria-pressed attribute with string value "true" or "false" telling the screen reader whether the list is currently visible.
Besides changing the state of the attribute, consider shifting focus to the first element in the dropdown when it appears. This is definately needed if the list doesn't follow the button in the html (i.e. some buttons cause stuff to appear at the end of the dom for instance, in which case a focus shift is required). The checkbox here tells the script to shift focus to the first element in the dropdown, or back to the button itself. Shifting it explicitly back to the button forces the screen reader to announce the new state of the button (NVDA fails to do this when the state is set to false, but announces the state when it is set to true). This should be enough; the user can then move to the list herself, assuming the screen reader actually detects and announces the change properly.
The split button should be handled in a similar way. They have two triggers in the sample code: an "a" element and an empty span element. I assume the "a" element is meant to trigger the default action. Add role="button" to this and now the screen reader announces it as a button. The span should be given role="button" and aria-pressed attribute and it should act just like the dropdown button below. Of course, the span needs some content so the screen reader can announce it; move the content outside the viewport or clip it to zero size to cause it visually hidden: http://www.mit.edu/~rjc/aria/visually-hidden.css.